我目前正在研究Java RMI如何工作,但我不明白某個方面。
在非分佈式多線程環境中,如果同一對象上的方法同時從不同的線程中調用,那麼每個線程將在相應線程的堆棧上執行(訪問共享數據不是我問題的一部分)。
在分佈式系統中,由於客戶端進程調用存根上的方法,並且在創建遠程對象的進程的堆棧上執行實際調用,因此如何同時調用方法?換句話說,當有兩個(或更多)請求在該線程上執行相同的方法時,在服務器線程中發生了什麼?
我想到了這個問題,因爲我想將它與我習慣的 - 執行方式在不同的堆棧上進行比較。併發訪問遠程對象Java RMI
0
A
回答
1
如何同時調用某個方法?
沒有指定。在RMI specification中仔細說明:「RMI運行時不保證將遠程對象調用映射到線程。」
這個祕密的含義是,你不能假設服務器是單線程的。
換句話說,當有兩個(或多個)請求在該線程上執行相同的方法時,在說服務器線程時會發生什麼?
不能有兩個或更多的請求在同一線程上執行該方法。這個問題沒有意義。你已經假定了一個並不存在的獨特'let say server thread'。
但是,可以有兩個或更多的請求來執行由兩個或更多併發客戶端,或一個客戶端中兩個或更多併發線程產生的方法,或者由於RMI規範的措辭,在服務器上假設一個單線程調度模型。
在Oracle/Sun實現中,它確實是多線程的,與IBM實現一樣。我不知道任何不是多線程的RMI實現,並且任何這樣的實現基本上都是無用的。
+0
謝謝你的好解釋。 – PetarMI
相關問題
- 1. Java RMI遠程對象演員/狀態
- 2. RMI - 遠程對象 - 設計問題
- 3. RMI - 遠程對象,rmiregistry
- 4. flex 3和訪問遠程Java對象
- 5. 使用RMI訪問對象
- 6. Spring RMI遠程訪問其他
- 7. RMI:可序列化和遠程對象
- 8. RMI實例化遠程對象
- 9. 併發訪問組對象
- 10. Java RMI - 遠程部署
- 11. 使用rmi註冊表確定java rmi遠程對象主機的IP地址
- 12. Java線程訪問對象
- 13. Java線程訪問對象
- 14. Java RMI:將遠程對象引用傳遞迴主機
- 15. 從Python程序訪問Java RMI API
- 16. 併發訪問,並免費堆對象
- 17. 對PostgreSQL的SQL_ASCII和Java遠程訪問
- 18. 從.NET訪問Java RMI
- 19. Java RMI:併發支持
- 20. java rmi傳遞ImageIcon對象
- 21. Java rmi導出對象
- 22. Java RMI - 傳遞對象
- 23. Java遠程訪問文件
- 24. XenServer Java遠程訪問
- 25. 通過創建初始上下文並執行查找來訪問遠程對象與RMI客戶端
- 26. 訪問遠程GarbageCollectorMXBean
- 27. Java:遠程方法調用(RMI)
- 28. Java編程訪問對象變量
- 29. Java對象圖形訪問程序庫
- 30. 如何訪問遠程對象的類變量
RMI服務器使用線程池來處理傳入的「調用」。根據本教程http://www.comp.lancs.ac.uk/~weerasin/csc253/tutorials/week7.html,客戶端進程中的線程與服務器中的線程之間沒有對應關係(即,來自同一進程的請求客戶端線程可能運行在不同的服務器線程中,並且來自同一客戶端進程的不同線程的請求可能運行在同一個服務器線程中。)來自不同客戶端進程的請求應該始終運行在不同的服務器線程中。 –
@jameslarge Sun/Oracle實施中沒有線程池。您引用的鏈接不是規範性參考。 – EJP