簡體   English   中英

調用相同的遠程對象時,客戶端上的Java RMI線程是順序執行還是並發執行?

[英]Java RMI threads on client-side are executing sequentially or concurrently when calling the same remote object?

我在理解Java RMI的特定方面時遇到麻煩。

有一個客戶端創建了N個線程,這些線程在RMIregistry上進行查找:

    Registry rmiRegistry;
    try {
        rmiRegistry = LocateRegistry.getRegistry(8585);
    IGestoreSportello igs = (IGestoreSportello)rmiRegistry.lookup("gestoresportelli");
    ExecutorService s = Executors.newCachedThreadPool();
    for(int i = 0; i < T; i++){
        s.execute(new threadRunner(igs));
    }

先前在服務器中將“ gestoresportelli”注冊為服務的位置。

因此,據我所知,客戶端對SAME對象的引用都相同。

我要問的是,當我在此對象上調用方法時,是CLIENT執行服務器代碼嗎?

還是服務器依次調用該對象上的方法?


因此,假設我們有:

線程1,線程2,線程3。 它們都在服務器上注冊的同一遠程對象上調用相同的方法。

他們是否按順序調用它:

Thread1->RemoteObjectReference.doSomething();
wait thread 1 to finish...
Thread2->RemoteObjectReference.doSomething();
wait thread 2 to finish...
Thread3->RemoteObjectReference.doSomething();

或同時:

Thread1->RemoteObjectReference.doSomething();
Thread2->RemoteObjectReference.doSomething();
Thread3->RemoteObjectReference.doSomething();

都在同一時間,即使是同一遠程對象?

我希望我足夠清楚。 謝謝!

我要問的是,當我在此對象上調用方法時,是CLIENT執行服務器代碼嗎?

沒有。

還是服務器依次調用該對象上的方法?

它是服務器,但是順序沒有定義。

他們會順序調用嗎

沒有定義。

或同時:

沒有定義。

更明確地說,RMI規范特別聲明不保證有關客戶端線程和服務器線程之間的關聯。

您可以從中得出的所有結論是,您不能假定它是單線程的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM