线程池学习之实际应用规范

线程池的原理,线程池的工作机制以及线程池的拒绝策略在前面的文章已经很完整的写清楚,但是对于实际开发怎么选择呢?

在阿里巴巴java开发手册这样写道:

 

Executors实现几种创建线程池方式如上图,考虑线程的性能当然要考虑线程池的存储底层结构,LinkedBlockingQueue是一个无界阻塞队列,只不过他的存储长度为Integer的最大21亿左右。

当有大量的并发时,队列会产生大量的线程,从而导致服务器扛不住,OOM。

我们创建线程可以使用下面的方式

 ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 
5, 
1L, 
TimeUnit.SECONDS, 
new LinkedBlockingQueue<Runnable>(3),
 Executors.defaultThreadFactory(), 
new ThreadPoolExecutor.AbortPolicy());

队列长度根据需要自己设置,线程工厂使用默认的即可。拒绝策略根据具体场景在做具体选择。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值