我有一個線程每5分鐘定期運行一次,它可能會更改標誌的值,並且許多線程讀取該標誌。如果以下設計有任何問題,請提出建議。我選擇volatile,所以每個線程都得到正確的標誌值並且不緩存。我沒有看到AtomicBoolean在這裏很有意義。易變vs原子布爾
Class A {
private static volatile boolean flag = false;
//Calls every 5 minutes
//Value of this flag may change every 5 minutes by thread.
checkAndSetFlag(boolean newFlag) {
flag= newFlag;
}
}
許多線程將只檢查值如下。如果某些線程在值改變的同時讀取舊值,我沒有問題。
Class B {
doSomething() {
if(A.flag) {
doSomethingElse();
}
}
}
這不是一個完全相同的副本。擬議的複製方式有許多作者線程和單個讀者,而在這個問題中反過來也是如此。這些細微的差異在多線程問題中很重要。 –