java-线程池的学习

创建线程池,使用juc(java.util.concurrent包)的ThreadPoolExecutor

五个参数,核心线程数,最大线程数,未工作线程的存活时间,时间单位,等待队列

创建线程池不能用executor,因为用的是LinkedBlockingDeque,是堵塞队列,会一直增加任务,造成OOM,推荐使用new ArrayBlockingQueue<>()

        new ThreadPoolExecutor(1,1,1, TimeUnit.SECONDS,new ArrayBlockingQueue<>(3),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());

其中Executors.defaultThreadFactory()为线程工厂

new ThreadPoolExecutor.AbortPolicy()为默认的拒绝策略

四种常见线程池:

newFixedThreadPool:固定线程数,等待队列为阻塞队列

newCachedThreadPool:线程数不足时,有空闲线程会直接使用,否则会创建新的,使用与执行大量短生命周期的异步任务

newSingleThreadExecutor:单线程的线程池

newScheduledThreadPool:可以执行定时任务和周期性的任务

线程池的状态

使用AtomicInteger来存储状态和线程数量,有32位,前3位代表状态,后29位代表线程数量

面试突击33:线程池有哪些状态?状态是如何转换的?-腾讯云开发者社区-腾讯云 (tencent.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值