2016-01-09 55 views
3

Javadoc of Executor interface說以下內容:之前發生Executor.submit的保證()

內存一致性效果:操作在一個線程提交Runnable對象到Executor之前發生-之前其執行開始,也許在另一個線程。

Java語言規範的哪個部分保證?還是僅僅因爲這些實現使用了一些內部同步? (如果是這種情況,一個例子會很棒。)因此,在實施自定義Executor時,我是否應該知道這一要求?

+1

那麼,javadoc指定它。 JLS沒有指定API。它指定了語言。是的,如果你要實現一個Executor,你最好遵守Executor接口的規範。 –

+0

那麼,一般來說,該語言確實保證線程限制的代碼以順序方式執行。在單線程應用程序中,根本不可能建立任何發生之前的關係。因此,上述語句不需要內存模型(它處理線程間可變數據的可見性和一致性)的任何規範。以上只是強化了提交前的代碼在提交開始執行之前已經執行的概念(即使在另一個線程中)。 – scottb

+0

@scottb我不同意。例如,如果工作線程不斷地爲一個新任務輪詢一個ArrayList,那麼在保證之前不會發生任何事情:工作線程可以在列表中看到一個新項目,但處於不一致的狀態。所以執行者必須小心謹慎(同步等) –

回答

3

JLS沒有指定API。它指定了語言。 javadoc是API規範。

因此是的,如果你要實現一個Executor,你最好遵守Executor接口的規範。執行者必須注意提交發生 - 在之前執行任務。這不會發生。需要同步(等待/通知,易失性寫入/讀取等)。

相關問題