3
在JLS 17.4.4,它說如何理解總訂單的同步訂單?
每次執行具有同步順序。同步順序是執行的所有同步操作的總順序。
我知道什麼是總訂單。而且我知道同步操作需要訂購。但是,這裏讓我困惑的是爲什麼它是ALL的同步操作的總訂單。例如,在監視器m上的解鎖動作發生在m的所有後續鎖定動作之前。但是,如果同時顯示器上有鎖定動作n,是否需要在顯示器上的解鎖動作後訂購m?如果不是,那麼爲什麼所有的同步操作都有一個總的順序?謝謝。
首先,我真的很感謝你的迴應,我認爲你的觀點已經啓發了我,我正在考慮的是:從17.4.3「如果所有動作都是以全部順序(執行順序)發生,這與程序的順序是一致的「,而且JMM語義上是順序一致的,這是通過同步動作來同步競爭數據來保證的,所以同步動作總有一個順序來確保JMM的順序一致性。訂購這裏是關於同步操作的可見性。 –
總結一下。雖然理論上認爲JMM的工作方式很有用,但實際上我真的不能想到這樣一個細節會有用的地方;線程間行爲以這種方式表現的事實可能不是JMM的副作用,但更可能是現今大多數CPU緩存工作的方式(如果我錯了,請糾正我)。無論哪種方式,如果您覺得這些細節對您的職業或項目或者其他方面有用,我會很好奇你分享:) – xTrollxDudex