考慮下面的類:如果一個方法檢查(獨立)A並且然後作用於B,是否包含競爭條件?
public class CheckThenAct
{
private volatile boolean flag = false;
public void setFlag(boolean flag) { this.flag = flag; }
public boolean getFlag() { return flag; }
private final Map<String, String> map = new ConcurrentHashMap<>();
public void removeIfFlag(String x)
{
if (flag)
map.remove(x);
}
}
是否removeIfFlag(String)
包含一個競爭條件?
到目前爲止,我已經閱讀的唯一示例具有條件和寫法,這些條件和寫法在某種程度上相互關聯(例如在相同集合對象上進行檢查和寫入) - 在這種情況下,這兩個字段之間沒有約束,他們不是同一個對象。
好吧,不是Java語言規範定義的一種* data-race *本身。但是你可能有一個原子性問題。此代碼是「線程安全的」,但可能無法按照您的要求運行。 – markspace