繁体   English   中英

为什么JMS会话对象不是线程安全的?

[英]Why JMS Session Object is not thread safe?

为什么JMS规范的设计方式使得当创建Sessions的Connection对象是线程安全的(由线程共享)时,并发线程不能使用Session对象?

JMS 2.0规范

第25页

限制对会话的并发访问有两个原因。

首先,会话是支持事务的JMS实体。 实现多线程的事务非常困难。

其次,会话支持异步消息消费。 重要的是JMS不要求用于异步消息消费的客户端代码能够处理多个并发消息。

此外,如果已经与多个异步使用者建立了会话,则不必强制客户端处理这些单独的使用者同时执行的情况。 这些限制使JMS更易于用于典型客户端。 更复杂的客户端可以通过使用多个会话来获得所需的并发性。 在经典API和特定于域的API中,这意味着使用多个会话对象。 在简化的API中,这意味着使用多个JMSContext对象。

JMS会话对象通常用于事务。 我们都知道事务是特定于线程的,不能跨越线程。 因此,不能跨线程使用事务处理的JMS会话。 我相信由于这个原因,JMS规范说会话不是线程安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM