1
假設我有一個Runnable,它執行簡單的文件寫入操作,並且此Runnable與執行程序一起調用。Executor's Runnable中的變量
隨着執行人是一個單獨的線程的Executor類..
public void doThis() {
executor.execute(new Runnable() {
@Override
public void run() {
file.write(_data);
}
});
}
確實的_data得到保存的時刻執行即時內容()被調用?這意味着一旦runnable被提交到隊列中,我可以繼續並更改_data,並且更改不會寫入文件中?
_data = something
doThis();
_data = something else
有沒有機會讓我做file.write(別的東西)?
這個問題是我將對_data進行很多更改,並且希望立即在新的_data上調用execute()。在這種情況下,我猜我唯一的選擇是實現某種數據結構_data,以便execute()將始終與_data []。一起工作。 – 2012-01-06 04:52:07
還有一個類似的問題發佈(http://stackoverflow.com/questions/8147015/executor-execute-jmm-guarantee),其中他們談論內存一致性以及如何「內存一致性的影響:提交Runnable對象到Executor發生 - 在其執行開始之前,可能在另一個線程中。「 我一直希望通過相同的邏輯,_data =在doThis()之前不會發生。然而,我不太確定「之前發生的線索中的行爲」是什麼意思。它仍然有可能嗎? – 2012-01-06 04:59:01