懶漢模式學習執行緒處理

2021-08-06 06:04:20 字數 970 閱讀 4338

懶漢模式學習執行緒處理
/** * created by ty on 2017/8/15. */

public class bluetoothmananger public static bluetoothmananger getinstance() } }

return instance; }

public static synchronized void f1() }

/** * 2. 為啥要判斷兩次null == instance呢?把第15(外層的if)行的外層if判斷去掉不行嗎?

* 行!去掉也不會出錯,但是如果判斷兩次效能更好。因為如果只判斷一次的話,每次執行getinstance()

* 函式都要對synchronized塊進行加鎖;而如果進行兩次判斷的話,只有第一次呼叫的時候(即instance==null)

* 的時候會對synchronized塊進行加鎖,其他時候(如果發現instance!=null)是不需要加鎖的。

* * * 3.把第25行的內部if判斷去掉不行嗎?不行!很有可能當外層判斷的時候,instance確實是null;

* 但是到了synchronized塊中,執行第26行的instance = new bluetoothmananger();的時候,instance已經被其他的執行緒給例項化了。

* * * 沒有內部if情況下,如果兩個執行緒同時執行getinstance(),判斷 instance都不為null後, 進入if判斷語句. * 這個時候乙個執行緒獲得鎖, 然後進入new了乙個物件,

並開心的執行完了. 這個時候另外乙個執行緒獲得了鎖,

* 但讓它也不會再去判斷 instace是否為null,

* 所以它也會再執行一次new操作. 所以這裡執行了兩次new操作. 當然最後instance還是只指向後一次new的物件. */

懶漢模式 餓漢模式 執行緒池例項

單例設計模式 保證類在記憶體中只有乙個物件 餓漢式 class singleton 2,宣告乙個引用 private static singleton s new singleton 3,對外提供公共的訪問方法 public static singleton getinstance 懶漢式 clas...

單例模式 執行緒安全且懶漢模式

單例模式 懶漢式基礎上加入併發控制,保證多執行緒環境下,對外存在乙個物件 1.構造器私有化 避免外部new構造器 2.提供私有的靜態屬性 儲存物件的位址 3.提供公共的靜態方法 獲取屬性 public class doublecheckedlocking 3.提供公共的靜態方法 public sta...

多執行緒 單例模式之懶漢

1.懶漢 延遲載入 2.正確 3.效率還比較高 通過 1.volatile 的引入,目的解決 ins new 重排序帶來的問題 2.synchronized 的引入,目的是解決原子性問題 3.見方法注釋 public class lazysingleton3 乙個獲得 ins 的方法 public ...