不停的创建新线程直至资源耗尽
Closed this issue · 5 comments
cr2121 commented
messageConsumer.subscribe(topic_order_status_change, 1024, new MessageListener() {
@Override
public void recieveMessages(Message message) throws InterruptedException {
doDispatch(message);
}
@Override
public Executor getExecutor() {
return Executors.newCachedThreadPool();
}
});
messageConsumer.completeSubscribe();
messageConsumer是单例的,getExecutor方法会不停被调用不产生线程直到整个程序不能创建新线程,如果getExecutor return null的话不存在该问题。
killme2008 commented
请作为实例变量,而不是局部变量使用。
cr2121 commented
@Autowired
private MessageConsumer messageConsumer;
spring注入的
killme2008 commented
executor = Executors.newCachedThreadPool();
messageConsumer.subscribe(topic_order_status_change, 1024, new MessageListener() {
@Override
public void recieveMessages(Message message) throws InterruptedException {
doDispatch(message);
}
@Override
public Executor getExecutor() {
return executor;
}
});
或者作为 listener 的实例变量
cr2121 commented
懂了,谢谢! 可是不明白的是为什么getExecutor会被多次调用呢,按我的理解这个executor是服务于这次订阅或者这个主题的应该在订阅的时候调用一次就够了。
killme2008 commented
每次执行任务都会调用一次,内部为了避免状态管理,不会做缓存。
在 2015年3月3日 下午6:31,Wang,Tao notifications@github.com写道:
懂了,谢谢!
可是不明白的是为什么getExecutor会被多次调用呢,按我的理解这个executor是服务于这次订阅或者这个主题的应该在订阅的时候调用一次就够了。—
Reply to this email directly or view it on GitHub
#114 (comment)
.
庄晓丹
Email: killme2008@gmail.com xzhuang@avos.com
Site: http://fnil.net
Twitter: @killme2008