论坛首页 Java企业应用论坛

带持久化缓冲的ThreadPoolExecutor

浏览 7718 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-11-06  
RejectedExecutionHandler参数选择ThreadPoolExecutor.CallerRunsPolicy 不是更好的做法吗

一个问题:持久化后,如果队列一直都处于满的状态(理想状态,很平稳,一直满),持久化的任务何时处理
0 请登录后投票
   发表时间:2012-11-06   最后修改:2012-11-07
freish 写道
RejectedExecutionHandler参数选择ThreadPoolExecutor.CallerRunsPolicy 不是更好的做法吗

一个问题:持久化后,如果队列一直都处于满的状态(理想状态,很平稳,一直满),持久化的任务何时处理

"持久化后,如果队列一直都处于满的状态(理想状态,很平稳,一直满),持久化的任务何时处理"?
这个问题是这样,当有工作线程需要新的请求时,ThreadPoolExecutor会调用BlockingQueue的相关方法,这个时候我们就自动放入一批(如果有持久化的)。具体可以参考代码SpongeArrayBlockingQueue,它是对ArrayBlockingQueue的一个简单扩展,方法take()是关键,看看就知道了。
0 请登录后投票
   发表时间:2012-11-07  
这个组件还有很多可以改进的地方,比分说采用更快的序列化方式、提供filter机制方便进行业务或其他处理的扩展等等。
0 请登录后投票
   发表时间:2012-11-07  
netcomm 写道
a123159521 写道
ThreadPoolExecutor默认的线程数是int的最大值2的32次-1,相当于20亿个线程,不可能超,如果超过线程数,而且ThreadPoolExecutor本身就有LinkedBlockingQueue来维护其线程队列.
你说的请求序列化,好像和ThreadPoolExecutor没啥关系,完全不用改jdk并发包的代码

可以再仔细看看,它的作用不是你描述的那样,hoho,源码比较简单,下下来看看就知道了。

我的意思是我们手动控制线程数量,如果要请求序列化,可以在提交到ThreadPool之前进行控制,这样可以保证线程池不会超出(如果有必要的话。)
0 请登录后投票
   发表时间:2012-11-18  
我勒个去,消息队列不就是干这活的吗?
0 请登录后投票
论坛首页 Java企业应用版

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