|
|
51CTO旗下网站
|
|
移动端

1.4.1 Executors

《Java多线程与Socket:实战微服务框架》第1章多线程基础,本书尽量采用简要和通俗易懂的方式来介绍多线程知识。本节为大家介绍Executors。

作者:庞永华来源:电子工业出版社|2019-03-26 15:46

1.4 线程池

线程的创建和销毁会消耗资源。在大量并发的情况下,频繁地创建和销毁线程会严重降低系统的性能。因此,通常需要预先创建多个线程,并集中管理起来,形成一个线程池。在需要用到线程时,从线程池中拿出一个线程来直接使用,执行完毕时再放回线程池。

1.4.1 Executors

从Java 5开始,可以使用java.util.concurrent.Executors类来创建线程池:

. 创建固定大小的线程池

  1. ExecutorService es = Executors.newFixedThreadPool(20); 

上面的代码创建了一个有着20个线程的固定大小线程池。有新任务时,如果池中没有空闲线程可用,就进入队列等待。队列大小的上限是Integer.MAX_VALUE。其优点是避免了线程创建和销毁的开销;缺点是池大小的配置容易过高或过低。无论过高或过低都会影响性能。如果希望自定义队列大小,则使用ThreadPoolExecutor。

. 创建可变大小的线程池

  1. ExecutorService es = Executors.newCachedThreadPool(); 

上面的代码创建了一个可缓存空闲线程60秒的线程池。有新任务时,如果池中没有空闲线程可用,则创建一个新线程并添加到池中,池大小的上限是Integer.MAX_VALUE。超过60秒未被使用的线程将被销毁。其优点是能按需创建线程,并尽可能地回收或复用它们。该方法适用于执行生存期较短的任务。其缺点是池大小的上限太大,“洪峰”来临时容易在短期内创建并持有大量线程。如果希望自定义池大小和线程的***空闲时长,则使用ThreadPoolExecutor。

. 创建一个只有一个线程的线程池

  1. ExecutorService es = Executors.newSingleThreadExecutor(); 
  2. 同Executors.newFixedThreadPool(1);

. 创建一个支持定时或周期性任务执行的线程池

  1. ScheduledExecutorService es = Executors.newScheduledThreadPool(2); 

此代码用于创建能够以固定周期或固定时延执行定时任务的线程池。


喜欢的朋友可以加入官方的读书群

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

超级网管员——网络服务

本书全面介绍了Windows Server 2003 R2中最常用的各种服务,包括域名服务、动态IP地址服务、Windows名称服务、活动目录服务、Web服务、FTP...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客