java常见的线程池&使用场景

Java通过Executors提供四种功能的线程池,分别为:

① newCachedThreadPool

创建一个数量无限制的可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

比较适合一些执行任务时间短的线程使用场景。

② newFixedThreadPool

创建一个固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待。定长线程池的大小最好根据系统资源需要进行设置。例如:对于IO密集型的任务一般设置为Runtime.getRuntime().availableProcessors()*2 即可利用进程数量的2倍等;

它比较适合一些执行任务时间长消耗资源大的情况,这样把线程数量控制好不会给系统造成太大的负担。

③ newScheduledThreadPool

创建一个指定大小的线程池,支持延时和周期性任务执行。所以它的应用场景不言而喻了,

例如:定时备份、定时检测等

④ newSingleThreadExecutor

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO先进先出, LIFO后进先出, 优先级)执行。创建一个有顺序的线程池

这类线程池适用于多个任务顺序执行的场景。

Java通过Executors提供四种功能的线程池,分别为: ① newCachedThreadPool 创建一个数量无限制的可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 比较适合一些执行任务时间短的线程使用场景。 ② newFixedThreadPool 创建一个固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待。定长线程池的大小最好根据系统资源需要进行设置。例如:对于IO密集型的任务一般设置为Runtime.getRuntime().availableProcessors()*2 即可利用进程数量的2倍等; 它比较适合一些执行任务时间长消耗资源大的情况,这样把线程数量控制好不会给系统造成太大的负担。 ③ newScheduledThreadPool 创建一个指定大小的线程池,支持延时和周期性任务执行。所以它的应用场景不言而喻了, 例如:定时备份、定时检测等 ④ newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO先进先出, LIFO后进先出, 优先级)执行。创建一个有顺序的线程池 这类线程池适用于多个任务顺序执行的场景。
经验分享 程序员 微信小程序 职场和发展