Java 常用线程池和自定义线程池

1 通过 Executors 工厂类来创建线程池

创建线程池的方法
newFixedThreadPool 有固定线程数的线程池,如果没有任务执行,那么线程会一直等待
newCachedThreadPool 线程池里有很多线程需要同时执行,老的可用线程将被新的任务触发重新执行,如果线程超过60秒内没执行,那么将被终止并从池中删除
newWorkStealingPool 创建一个拥有多个任务队列(以便减少连接数)的线程池
newScheduledThreadPool 该线程池可用于定时或周期性任务的执行
newSingleThreadExecutor 只有一个线程的线程池,所有提交的任务是顺序执行
newSingleThreadScheduledExecutor 只有一个线程,该线程池可用于定时或周期性任务的执行

1 各线程池适应场景总结

1.1  newFixedThreadPool:创建一个固定大小的线程池,因为采用无界的阻塞队列,所以实际线程数量永远不会变化,适用于可以预测线程数量的业务中,或者服务器负载较重,对当前线程数量进行限制
1.2 newCachedThreadPool:用来创建一个可以无限扩大的回收型线程池,适用于服务器负载较轻,执行很多短期异步任务
1.3 newWorkStealingPool:创建一个拥有多个任务队列的线程池,可以减少连接数,创建当前可用cpu数量的线程来并行执行,适用于大耗时的操作,可以并行来执行
1.4 newScheduledThreadPool:可以延时启动,定时启动的线程池,适用于需要多个后台线程执行周期任务的场景
1.5 newSingleThreadExecutor:创建一个单线程的,适用于需要保证顺序执行各个任务,并且在任意时间点,不会有多个线程是活动的场景
1.6 newSingleThreadScheduledExecutor:创建一个单线程的,适用于需要保证顺序执行各个任务,并且在任意时间点,不会有多个线程是活动的场景,同时可以延时启动,定时启动的线程池

2 采用线程池的优势

2.1 重用存在的线程,减少对象创建、消亡的开销,性能佳
2.2 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞
2.3 提供定时执行、定期执行、单线程、并发数控制等功能

3 方法列表:

public static ExecutorService newFixedThreadPool(int nThreads)  
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory)

public static ExecutorService newCachedThreadPool()
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory)

public static ExecutorService newWorkStealingPool()
public static ExecutorService newWorkStealingPool(int parallelism)

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
public static ScheduledExecutorService newScheduledThreadPool(
            int corePoolSize, ThreadFactory threadFactory)

public static ExecutorService newSingleThreadExecutor()
public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory)

public static ScheduledExecutorService newSingleThreadScheduledExecutor()
public
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值