【发布时间】:2013-12-30 12:11:09
【问题描述】:
JMS 2.0 规范第 2.14 节:
JMS 可能要求其所有对象都支持并发使用。 由于对并发访问的支持通常会增加一些开销和 复杂性,JMS 设计限制了它对并发的要求 访问那些自然会被 a 共享的对象 多线程客户端。其余对象被设计为 一次由一个逻辑控制线程访问。
支持并发使用: 目的地、连接工厂、连接
不支持并发使用: JMSContext、Session、生产者、消费者
不确定为什么规范中没有讨论 Message 的线程安全性?
编辑
消息线程安全吗?两个线程可以共享吗?
没有。消息不是线程安全的。它不应该在线程之间共享。
【问题讨论】:
-
为什么需要在多个线程中访问同一个 Message 对象?特别是在多线程中修改消息。您可以允许多个消费者并发读取。
-
在线程之间共享消息是安全的,除非他们试图修改消息
-
场景 - 两个线程处理负载和设置消息属性。可以在没有种族的情况下并行完成吗?
-
@AmitG 这是一个非常奇怪的用例。但是不,它不能通过 JMS 消息来完成。
-
@AmitG 请参阅第 6.2 章,其中说会话创建的任何对象都不是线程安全的。消息由会话创建(显式地或隐式地从会话创建的另一个对象创建)。不过,您可以自己锁定以从多个线程访问它。
标签: java multithreading concurrency thread-safety jms