簡體   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