该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间: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 有源码解析 |
|
返回顶楼 | |
发表时间: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) 还有就是定制,被拒绝的和抛弃放入可持久化队列,后面根据情况处理。 |
|
返回顶楼 | |