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