3
Javadoc of Executor interface說以下內容:之前發生Executor.submit的保證()
內存一致性效果:操作在一個線程提交
Runnable
對象到Executor
之前發生-之前其執行開始,也許在另一個線程。
Java語言規範的哪個部分保證?還是僅僅因爲這些實現使用了一些內部同步? (如果是這種情況,一個例子會很棒。)因此,在實施自定義Executor
時,我是否應該知道這一要求?
那麼,javadoc指定它。 JLS沒有指定API。它指定了語言。是的,如果你要實現一個Executor,你最好遵守Executor接口的規範。 –
那麼,一般來說,該語言確實保證線程限制的代碼以順序方式執行。在單線程應用程序中,根本不可能建立任何發生之前的關係。因此,上述語句不需要內存模型(它處理線程間可變數據的可見性和一致性)的任何規範。以上只是強化了提交前的代碼在提交開始執行之前已經執行的概念(即使在另一個線程中)。 – scottb
@scottb我不同意。例如,如果工作線程不斷地爲一個新任務輪詢一個ArrayList,那麼在保證之前不會發生任何事情:工作線程可以在列表中看到一個新項目,但處於不一致的狀態。所以執行者必須小心謹慎(同步等) –