【发布时间】:2013-07-26 23:25:26
【问题描述】:
遇到一个问题,即 connection.start() 由于
而失败java.net.ConnectException: Connection refused: connect
当我将javax.jms.TopicConnection 包裹在ThreadLocal 中时,如下所示:
private ThreadLocal<TopicConnection> createThreadLocalTopicConnection(final TopicConnectionFactory cf)
{
return new ThreadLocal<TopicConnection>() {
public TopicConnection result;
protected synchronized TopicConnection initialValue() {
try {
// Returns a javax.jms.TopicConnection object.
result = cf.createTopicConnection();
result.start();
return result;
} catch (JMSException e) {
throw new RuntimeException(e);
}
}
protected void finalize() throws Throwable {
if(result!=null) result.close();
}
};
}
如果我只是将TopicConnection 创建为一个裸static 变量,它可以毫无问题地连接。任何人都可以解释为什么它会作为一个裸变量工作,但是当包裹在 ThreadLocal 中时它会失败?这一次 Google 让我非常失望。
【问题讨论】:
标签: java multithreading jms activemq thread-local