论坛首页 Java企业应用论坛

ThreadPoolExecutor几点使用建议

浏览 64680 次
该帖已经被评为良好帖
作者 正文
   发表时间:2012-11-06  
k10509806 写道
1.  pool threads启动后,以后的任务获取都会通过block queue中,获取堆积的runnable task.

所以建议: block size >= corePoolSize ,不然线程池就没任何意义

这个不懂?不是说当提交的任务数超过了corePoolSize,才会将当前的runable提交到一个block queue中吗?
为什么pool threads启动后,以后的任务获取都会通过block queue中了?

http://www.ticmy.com/?p=243
有源码解析
0 请登录后投票
   发表时间:2012-11-06   最后修改:2012-11-06
看一眼Executors代码的基本就清楚了,手机客户端时多线程处理数据尤其注意要reject丢弃老的请求就好了,服务端的考虑服务器并发能力,和处理的延迟做一个权衡。
客户端:如果客户端线程池采取拉的方式,因为切换一个页面前面请求其实可以丢弃,设置成大致这样表示客户端只处理最近的请求,大致可以设置成如下这样
new ThreadPoolExecutor(1, 3,
                60L, TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(5),new ThreadPoolExecutor.DiscardOldestPolicy());

服务端一般这两种情况使用比较多,一种请求及时性要求比较高并不希望被前面请求阻塞一般就是
Executors.newCachedThreadPool(threadFactory);

另一种就是类似,邮件,消息服务,大多数时间请求量大,但是可以接受延迟
Executors.newFixedThreadPool(2*coreSize+1)

还有就是定制,被拒绝的和抛弃放入可持久化队列,后面根据情况处理。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics