首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java面试 >

关于JMS轨范和多线程的一些疑问

2012-08-22 
关于JMS规范和多线程的一些疑问在JMS规范中ConnectionFactoryDestination(Queue和Topic)认为是可以受管的,

关于JMS规范和多线程的一些疑问
在JMS规范中
ConnectionFactory
Destination(Queue和Topic)
认为是可以受管的,在服务器上可以使用jndi访问。

然后根据JMS规范的描述
ConnectionFactory
Connection
Destination(Queue和Topic)
都是线程安全的,也就是说多个线程公用不会造成并发访问控制的问题。
但是Session对象不是线程安全的,每个Thread都应当有自己的Session,才不会造成并发访问下的异常。

我的问题来了:根据目前我手上的api,不在容器中的话,只有用
Queue sessioncreateQueue(java.lang.String queueName) 和 Topic createTopic(java.lang.String topicName)
才能拿到Destination(Queue和Topic)的对象。而Destination(Queue和Topic)又是可以被多线程共享的。
那我如果再程序中想共享Destination(Queue和Topic)岂不是应该先用Connection去获得Session,然后用Session获得Destination(Queue和Topic)。然后再去关闭Session?
那也就是说说明根据JMS Destination(Queue和Topic) 虽然依赖于 Session创建,但是在使用的时候其实是和Session无关的?


另外还有个小问题是多线程使用同一个Connection对象,创建的Session读取消息时,应该是不会出现并发控制的问题吧?

[解决办法]
“但是在使用的时候其实是和Session无关的?”
这句没太看懂楼主的意思。

实现线程安全,可以针对Queue和Topic两个对象来做,对其的新增、删除方法加同步即可。
最后一句话的问题,如果针对Queue和Topic做了同步,应该就没有并发不同步的问题了。
[解决办法]
确实是的。

考虑把Session理解为数据库连接会话(Hibernate中也有Session的概念),Topic类似于一个表。

同一个表是可以被并发访问的;但同一个Session被并发访问就存在问题了。

[解决办法]
刚刚开始研究jms的东西,的跟大牛没学学啊
[解决办法]
这个。。。不回答问题就拿分。。。会不会不地道啊。。。
[解决办法]
当然应该先用Connection去获得Session,
然后用Session获得Destination(Queue和Topic)。
然后再去关闭Session。


这是安全滴。



[解决办法]
学习一下!

热点排行