java1.6 线程池_JDK1.6中线程池更好了,有allowCoreThreadTimeOut

要做异步任务执行队列,具体需求如下:

1. 有个线程池用于执行任务

2. 有个有界队列,用于缓存未执行的任务

3. 没有任务执行时,我希望线程池中的线程停掉

这看似是个很正常的需求,但是用JDK1.5(我的工作地方JDK还是1.5的)实现,真得很困难的。

ThreadPoolExecutor中线程池有corePoolSize 和 maximumPoolSize两个参数。JDK1.5中线程池至少保持corePoolSize的线程,所以为了满足上面的需求,corePoolSize必须被设置为0。但是,JDK1.5中队列不满的话,是不会创建大于corePoolSize大小的线程数的。也就是,corePoolSize为0时,队列满了,才会创建新的线程,这显然不满足我的需求。

今天看JDK1.6的文档时,发现ThreadPoolExecutor多了一个allowCoreThreadTimeOut方法。这个方法是允许线程数低于corePoolSize时,线程也因为空闲而终止。有了这个方法,实现上面的需求就非常简单了。将corePoolSize 和 maximumPoolSize设置为相同的大小,allowCoreThreadTimeOut设置为true,加上一个有界队列,OK了。

然后又谷歌了下,原来有人和我有同样的诉求,然后就加了新的方法。详见http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6233235

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值