餓漢式單例模式在多執行緒中併發訪問的解決方案
* 懶漢式 如果在多執行緒重會出現執行緒安全問題
* */
class Sing {
private static Sing sin = null;
private Sing() {}
// 通過同步鎖直接就可以解決執行緒安全問題 這裡屬於的是靜態的所以這裡的
// 鎖為Sing.class位元組碼物件進行的 但是這樣會降低cpu的執行效率
// 解決執行緒安全問題的同時 還能提高cpu執行效率
public static Sing getInstantce() {
// 當2執行緒進來的時候發現sin已經不再為空直接返回 是不是減少了判斷鎖的次數 提高了cpu的
// 執行效率
if (sin == null) {
// 執行緒1沒有鎖 進不去
synchronized(Sing.class) {
// 這裡會出現執行緒安全問題
// 當執行緒1來到這裡判斷髮現物件不為空直接返回
if (sin == null)
// 執行緒0停止
sin = new Sing();
}
}
return sin;
}
}
class Demo implements Runnable{
@Override
public void run() {
// 這裡就是多執行緒在懶漢式併發訪問的問題解決方案
Sing.getInstantce();
}
}