java线程池及使用场景

2019-11-15  本文已影响0人  任嘉平生愿

线程池的种类以及使用场景

五种线程池

JUC
newSingleThreadPool
newFixedThreadPool
newCachedThreadPool
newScheduledThreadPool
Spring
ThreadPoolTaskExecutor (BlockingQueue)

execute和submit区别
execute()
用于提交不需要返回值的任务
submit()
用于提交需要返回值的任务

newSingleThreadPool
只有一个线程,就确保所有的任务都在同一个线程中顺序执行

newFixedThreadPool
全是核心线程
即使是空闲状态,线程不会被回收,除非线程池被关闭
使用LinkedBlockingQueue
适用于任务量比较固定但耗时长的任务。

newCachedThreadPool
是非核心线程,其maximumPoolSize设置为Integer.MAX_VALUE,线程可以无限创建
使用SynchronousQueue
这个队列是无法插入任务的,一有任务立即执行
比较适合任务量大但耗时少的任务。

newScheduledThreadPool
这类线程池核心线程数量是固定
它的非核心线程是没有限制的,并且非核心线程一闲置就会被回收核心线程是不会回收
使用DelayedWorkQueue
会将任务排序,按新建一个非核心线程顺序执行,执行完线程就回收

ThreadPoolTaskExecutor
spring为我们提供的线程池
采用BlockingQueue
配合 ConcurrentTaskExecutor保证安全
手动new线程池避免了OOM

上一篇 下一篇

猜你喜欢

热点阅读