Executors(执行器)提供的四种线程池

java线程池:

newCacheThreadPool :创建一个可缓存线程池,线程的数量不固定,可以根据需求自动创建线程

这种类型的线程池特点是:

1、工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。
2、如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。
3、在使用CachedThreadPool时,一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统瘫痪。
//摘抄自https://blog.csdn.net/sayoko06/article/details/79579639

newFixThreadPool:创建一个定长的线程池,可控制线程最大并发数,超出的线程会在队列中等待

创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。

//摘抄自https://g.csdn.net/sinat_36475966/article/details/80689279

newScheduledThreadPool :创建一个定长线程池,支持定时及周期性任务执行

Java 5 推出了基于线程池设计的 ScheduledExecutor。其设计思想是,每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需要注意的是,只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ScheduledExecutor 都是在轮询任务的状态。

//摘抄自https://blog.csdn.net/bobonow/article/details/6936293

newSingleThreadPool :创建一个单线程化的线程池,他只会用唯一的线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行

单个后台线程 (其缓冲队列是无界的)。
创建一个单线程的线程池。这个线程池只有一个核心线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

//摘抄自https://www.jianshu.com/p/1e90648ef1f4

猜你喜欢

转载自blog.csdn.net/bingdelingyu/article/details/85716453
今日推荐