我知道這顯然是一種競爭條件。但是可能發生的事情是什麼?在Java競爭條件下可能發生的最壞情況是什麼?
class Blah {
List<String> stuff;
public List<String> getStuff() {
return stuff
}
public void setStuff(List<String> newValue) {
this.stuff = newValue
}
}
b = new Blah();
// Thread one
b.setStuff(getListFromSomeNetworkResource());
for (String c : b.getStuff()) {
// Work with c
}
// Thread two
b.setStuff(getListFromSomeNetworkResource());
for (String c : b.getStuff()) {
// Work with c
}
-
可以這樣丟的RuntimeException
- ?
- 可以這段錯誤jvm?
- 可以這段錯誤的線程之一?
- 它取決於處理器。如果它是英特爾至強處理器呢?
- 這可以拋出一個NullPointer異常嗎?
- 線程2可以讀取線程1,反之亦然設置的內容如果函數實際返回不同的值
我理解,這是一個競爭條件,不會寫這樣的代碼。但我如何說服別人不要?
更新:
假設:
getListFromSomeNetworkResource()
總是返回一個新ArrayList
。大小可能爲0或更多。getListFromSomeNetworkResource()
是線程安全的。
下載者,請發表評論 – balki