JMS QueueSender线程安全吗?
我想在multithreading环境中使用QueueSender。
QueueSender.send()
线程安全吗?
不, MessageProducer
/ QueueSender
不是线程安全的。
或者更具体地说: Session
不是线程安全的。 JavaDoc for Session
在第一句中明确提到了这一点:
Session对象是用于生成和使用消息的单线程上下文。
由于MessageProducer
/ QueueSender
绑定到Session
您不能同时在多个线程中使用它。 实际上你不能在不同的时间从两个不同的线程中使用它!
以下截图来自JMS2规范
如您所见,Session Object不支持并发线程的使用。 Session不是线程安全的Object。 从该Session实例创建的所有对象的相同gos,如Messages,Producers,Consumers
。 因此,这些对象不能由两个线程共享,这是客户端应该关注的而不是JMS提供者。