Является ли поток JMS QueueSender безопасным?
Я хочу использовать QueueSender в многопоточной среде.
Безопасен ли поток QueueSender.send()
?
Ответы
Ответ 1
Нет, MessageProducer
/QueueSender
не является потокобезопасным.
Или более конкретно: Session
не является потокобезопасным. JavaDoc для Session
явно упоминает это в своем первом предложении:
Объект Session - это однопоточный контекст для создания и потребления сообщений.
И поскольку a MessageProducer
/QueueSender
привязан к Session
, вы не должны использовать его из более чем одного потока одновременно. На самом деле вы не должны использовать его из двух разных потоков в разное время!
Ответ 2
Следующий снимок экрана из спецификации JMS2
![enter image description here]()
Как вы видите, Session Object не поддерживает использование параллельных потоков. Сессия не является потокобезопасным объектом. То же самое для всех объектов, созданных из этого сеанса, например Messages,Producers,Consumers
. Поэтому эти объекты не должны делиться двумя потоками, и это то, за чем клиент должен заботиться, а не провайдеры JMS.