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提供者。