好吧,假設我有一個具有線程安全實現的Java Math類。線程A現在正在執行SetValue(1),並導致Math類被鎖定。如果線程B嘗試同時訪問GetValue(),會發生什麼情況?它是否會等到鎖定釋放或方法請求直接終止而沒有警告或異常?當第一個線程鎖定類時第二個線程會發生什麼
public class Math {
private static int value = 0;
public synchronized static void setValue(int value) {
Math.value = value;
}
public synchronized static int getValue() {
return value;
}
}
首先,您不能在靜態方法中使用「this」。 – Juvanis
對不起,我只是用純粹的寫作做了個快速的例子。我想確保當類被鎖定時下一個線程的行爲。 – lannyboy
這裏有幾點需要注意:1)從int分配/讀取是所有Java實現的原子操作,所以'synchronized'在這方面沒有幫助。 2)即使班級同步,它也不會阻止競賽狀況。 –