public synchronized static Single newInstance() {
if (single == null) {
synchronized (Single.class) {
if (single == null) {
single = new Single();
}
}
}
return single;
}
這么加鎖對不對
uj5u.com熱心網友回復:
你在方法上加了鎖,那就注定只能有一個執行緒能進入方法,那你在方法內再加鎖還有啥意義?uj5u.com熱心網友回復:
不對,你的雙重檢測毫無意義uj5u.com熱心網友回復:
方法上不用加鎖,或者下不用加鎖,你這樣啥意思uj5u.com熱心網友回復:
https://blog.csdn.net/qinhaotong/article/details/87884048uj5u.com熱心網友回復:
你說的這個單例叫dcl(double check lock)雙重檢查,不是雙重鎖,方法上加鎖了,方法里面就不用了加鎖了,應該把方法上的synchronized 去掉,宣告single變數為volatile修飾。https://www.cnblogs.com/hexinwei1/p/9909555.html
uj5u.com熱心網友回復:
public static Single newInstance() {
if (single == null) {
synchronized (Single.class) {
if (single == null) {
single = new Single();
}
}
}
return single;
}
即便這樣加鎖之后也可能由于編譯器優化問題,導致報錯。
關于這一點,可以參考我的blog : https://blog.csdn.net/zy353003874/article/details/106727869
uj5u.com熱心網友回復:
靜態方法上的synchronized 和 方法內部的 synchronized 代碼塊,兩者選擇一個即可。樓主這樣上兩次鎖,沒有啥意義。兩種用法,都是給Single.class上鎖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/49452.html
標籤:Java EE
上一篇:c/s程式
