我正在使用Glassfish作为我的JMS提供程序,完成Sun JMS教程(
sender source,
receiver source)的
‘Simple Point-to-Point Example’部分.我在Glassfish管理界面中设置了QueueConnectionFactory和Queue,并将相关的JAR添加到我的类路径中,接收者正在接收发件人发送的消息.
但是,发送者和接收者都不会终止.主线程正常退出(成功调用queueConnection.close()之后),但两个非守护程序线程仍然悬而未决:
> iMQReadChannel-0
> imqConnectionFlowControl-0
看来(从this java.net thread开始),原因是queueConnection.close()只返回到池的连接,而不是真正关闭它.我找不到任何方法告诉池关闭,所以我留下的唯一选择是System.exit(),这感觉不对.
我已经尝试将最小池大小设置为0,将最大池大小设置为1,将空闲超时设置为10秒,但似乎没有任何区别.即使我只查找连接工厂并且不要求连接,这两个线程仍然启动并且不会终止.
任何帮助非常感谢!
最佳答案 为什么不直接使用System.exit(0)终止?给定示例,当前行为是正确的(当所有非守护程序线程结束时,Java程序终止).
也许你可以通过播放客户端库的属性(空闲时间等等)来正确关闭样本,但似乎其他人(http://www.nabble.com/Simple-JMS-Client-doesn%27t-quit-td15662753.html)仍然遇到同样的问题(而且,无论如何,我仍然不明白什么重点是).