java多线程入门(五)线程池的使用

简介: java多线程入门(五)线程池的使用

1.为什么用线程池



  • 线程池会维护和创建一些存活的线程,达到开箱即用的效果
  • 对线程的重复利用,减少线程的创建、销毁对系统的开销
  • 有任务执行的时候,可以直接执行,减少系统响应时间
  • 线程池可以有效的管控线程,反例每个请求过来都创建个线程在并发量的大的时候系统可能会挂掉的


2.创建线程池的几种方式



  • //创建一个缓冲池,缓冲池容量大小为Integer.MAX_VALUE,在执行任务为空的时候会释放掉线程的,有新任务的时候需要重新创建线程
  • Executors.newCachedThreadPool();
  • //创建容量为1的缓冲池
  • Executors.newSingleThreadExecutor();
  • //创建固定容量大小的缓冲池 它不会释放工作线程,还会占用一定的系统资源
  • Executors.newFixedThreadPool(int);
  • //创建周期性执行的线程池
  • Executors.newScheduledThreadPool(1);
  • 通过代码可以看到上面的线程创建都是基于ThreadPoolExecutor创建出来的


ThreadPoolExecutor介绍



public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) 
//调用
executor.execute(Runnable command)
executor.sumbit(Runnable command)
//这里可以有返回值
executor.sumbit(Callable <T> task)
Future<String> future = executor.submit(callable);
System.out.println(future.get())
复制代码


参数介绍


  • corePoolSize 核心线程数定义了最小可以同时运行的线程数量
  • maximumPoolSize 线程池最大线程数,线程池最多可以创建的线程数
  • keepAliveTime 线程没有任务执行时最多保持多久时间会终止
  • unit 时间单位
  • workQueue 一个阻塞队列,用来存储等待执行的任务
  • ArrayBlockingQueue 有界队列
  • LinkedBlockingQueue 无界队列
  • SynchronousQueue 同步队列
  • threadFactory 线程工厂,主要用来创建线程
  • RejectedExecutionHandler 拒绝策略
  • ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
  • ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
  • ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
  • ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务


执行过程


  • 获取系统CPU个数
  • Runtime.getRuntime().availableProcessors()


网络异常,图片无法展示
|

相关文章
|
1天前
|
Java
Java线程学习经典例子-读写者演示
Java线程学习经典例子-读写者演示
6 0
|
3天前
|
监控 算法 Java
Java性能优化(九)-多线程调优-垃圾回收机制优化
Java性能优化(九)-多线程调优-垃圾回收机制优化
12 0
|
3天前
|
缓存 Java 测试技术
Java性能优化(八)-多线程调优-线程池大小设置
Java性能优化(八)-多线程调优-线程池大小设置
5 0
|
3天前
|
安全 Java 大数据
Java性能优化(七)-多线程调优-并发容器的使用
Java性能优化(七)-多线程调优-并发容器的使用
14 0
|
3天前
|
缓存 算法 安全
Java性能优化(六)-多线程调优-乐观锁
Java性能优化(六)-多线程调优-乐观锁
9 0
|
3天前
|
算法 Java 大数据
Java不同版本的多线程开发:进化之路
Java不同版本的多线程开发:进化之路
18 1
|
3天前
|
算法 Java 大数据
Java多线程中顺序打印
Java多线程中顺序打印
14 2
Java多线程中顺序打印
|
3天前
|
Java 调度 开发者
Java中的多线程编程:基础知识与实践
【6月更文挑战第4天】本文深入探讨了Java中多线程编程的基础知识和实践,旨在帮助读者理解并掌握如何在Java中有效地使用多线程。我们将从线程的基本概念开始,然后介绍如何在Java中创建和管理线程,最后通过一些实际的例子来展示多线程编程的应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。
13 0
|
24天前
|
Java 调度
Java并发编程:深入理解线程池的原理与实践
【4月更文挑战第6天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将从线程池的基本原理入手,逐步解析其工作过程,以及如何在实际开发中合理使用线程池以提高程序性能。同时,我们还将关注线程池的一些高级特性,如自定义线程工厂、拒绝策略等,以帮助读者更好地掌握线程池的使用技巧。
|
9月前
|
算法 Java 调度
Java由浅入深理解线程池设计和原理1
Java由浅入深理解线程池设计和原理1
143 0