Java 线程池相关概念

1. 优点:
(1) 提高资源利用率,线程池可以重复利用已经创建了的线程。(2) 提高响应速度,当线程池中线程数量没有超过最大上限的时候,有些线程出于等待分配任务状态,当任务来到时,可以直接执行,无需创建操作。(3) 具有可管理性,减少频繁创建销毁线程带来的系统开销。

2. 分类:
(1) FixedThreadPool
这个实例会复用固定数量的线程处理一个共享的无边界队列,任何时间点,会有最多固定数量的线程出于活动状态,当所有线程都处于活动状态时,当有新的任务提交过来,会在队列中排队,知道有线程空闲。如果有任何线程在执行任务过程中出现错误终止,新的线程会继续执行其剩余的任务。所有线程会一直存在于线程池中,直到显示的执行 ExecutorService.shutdown() 关闭。

(2) CacheThreadPool
它是线程数量不等的线程池,只有非核心线程,并且数量很大,当有新任务进来时,如果所有线程都处于活动状态,则新创建线程执行任务并放到线程池中,否则则使用空闲状态的线程执行任务。当线程处于空闲状态 60s 后,则会被中止并从缓存中移除。因此,线程池在长时间空闲后不会消耗任何资源。

(3)SingleThreadPool
它只有一个核心线程,它的所有任务都在同一个线程中按顺序执行,并处理了线程同步问题。如果单个线程在执行任务过程中出现错误中止,则会有新的线程代替执行后续的任务。任何时候都不会多于一个线程处于活动状态。

(4) ScheduledThreadPool
它的核心线程数量是固定的,非核心线程数量没有限制,当非核心线程闲置时,会立即回收。这类线程主要用于执行定时任务和具有定时周期的任务。

FixedThreadPool 与 CachedThreadPool 特性对比

特性FixedThreadPoolCachedThreadPool
重用FixedThreadPool 与 CacheThreadPool差不多,也是能 reuse 就用,但不能随时建新的线程缓存型池子,先查看池中有没有以前建立的线程,如果有,就 reuse ;如果没有,就建一个新的线程加入池中
池大小可指定 nThreads,固定数量可增长,最大值 Integer.MAX_VALUE
队列大小无限制无限制
超时无 IDLE默认 60 秒 IDLE
使用场景所以 FixedThreadPool 多数针对一些很稳定很固定的正规并发线程,多用于服务器大量短生命周期的异步任务
结束不会自动销毁注意,放入 CachedThreadPool 的线程不必担心其结束,超过 TIMEOUT 不活动,其会自动被终止。
    原文作者:kevenZheng
    原文地址: https://www.jianshu.com/p/ad8254030568
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞