精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-11-06
RejectedExecutionHandler参数选择ThreadPoolExecutor.CallerRunsPolicy 不是更好的做法吗
一个问题:持久化后,如果队列一直都处于满的状态(理想状态,很平稳,一直满),持久化的任务何时处理 |
|
返回顶楼 | |
发表时间:2012-11-06
最后修改:2012-11-07
freish 写道 RejectedExecutionHandler参数选择ThreadPoolExecutor.CallerRunsPolicy 不是更好的做法吗
一个问题:持久化后,如果队列一直都处于满的状态(理想状态,很平稳,一直满),持久化的任务何时处理 "持久化后,如果队列一直都处于满的状态(理想状态,很平稳,一直满),持久化的任务何时处理"? 这个问题是这样,当有工作线程需要新的请求时,ThreadPoolExecutor会调用BlockingQueue的相关方法,这个时候我们就自动放入一批(如果有持久化的)。具体可以参考代码SpongeArrayBlockingQueue,它是对ArrayBlockingQueue的一个简单扩展,方法take()是关键,看看就知道了。 |
|
返回顶楼 | |
发表时间:2012-11-07
这个组件还有很多可以改进的地方,比分说采用更快的序列化方式、提供filter机制方便进行业务或其他处理的扩展等等。
|
|
返回顶楼 | |
发表时间:2012-11-07
netcomm 写道 a123159521 写道 ThreadPoolExecutor默认的线程数是int的最大值2的32次-1,相当于20亿个线程,不可能超,如果超过线程数,而且ThreadPoolExecutor本身就有LinkedBlockingQueue来维护其线程队列.
你说的请求序列化,好像和ThreadPoolExecutor没啥关系,完全不用改jdk并发包的代码 可以再仔细看看,它的作用不是你描述的那样,hoho,源码比较简单,下下来看看就知道了。 我的意思是我们手动控制线程数量,如果要请求序列化,可以在提交到ThreadPool之前进行控制,这样可以保证线程池不会超出(如果有必要的话。) |
|
返回顶楼 | |
发表时间:2012-11-18
我勒个去,消息队列不就是干这活的吗?
|
|
返回顶楼 | |