簡體   English   中英

RMI是否保證執行順序?

[英]Does RMI guarantee the order of execution?

例如,當一個客戶端執行如下操作時:

serverQueue.push(X);
serverQueue.push(Y);
Object Z = serverQueue.front();
boolean orderPreserved = Z.equals(X);

假設只有一個客戶端和那個serverQueue是普通隊列,是否保證orderPreserved始終為true?

由於RMI是同步的,因此操作將按照調用它們的順序執行。

換句話說,如果操作在本地執行時給出orderPreserved = true,它們將通過RMI給出相同的結果。

RMI是否保證執行順序?

在某種意義上,你的意思是肯定的。

如果線程T以給定順序依次向遠程對象R發出或嘗試進行2次RMI調用,則保證R將以相同的順序依次獲得這些調用。

serverQueue.push(X);
serverQueue.push(Y);
Object Z = serverQueue.front();

Java方法調用的語義意味着本地(代理)方法調用以源代碼順序發生。 這意味着本地第二次push直到第一次push才會開始。

現在,RMI的同步特性意味着在遠程對象的響應返回之前,本地代理push調用不會返回。 代理上的調用等待來自遠程方法調用的響應; 即正常的返回響應(在這種情況下沒有任何值)或異常響應。

因此,如果將所有這些放在一起,則可以證明對應於代理serverQueue的遠程對象上的2個push調用必須以與本地調用相同的順序發生,並且它們不能重疊。

您需要建立的所有事實是Java不會對線程內的順序事件重新排序,並且RMI是同步的。 其余部分遵循簡單的邏輯,無需考慮/訴諸RMI實現的細節。


很明顯,如果兩個push調用是在不同的線程上進行的,則無法保證它們將由遠程對象按順序處理。 但這與這一情況不同。

RMI是否保證執行順序?

RMI無需擔保。 Java保證它。 在第一個方法調用返回之前,您無法訪問第二個方法調用。 RMI方法語義與本地方法語義相同,但參數傳遞模式除外。

暫無
暫無

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

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