DCL單例模式,用volatile關鍵建立

2021-09-19 09:09:53 字數 900 閱讀 5862

單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。

單例模式的好處:

控制資源的使用,通過執行緒同步來控制資源的併發訪問;

控制例項產生的數量,達到節約資源的目的。

作為通訊媒介使用,也就是資料共享,它可以在不建立直接關聯的條件下,讓多個不相關的兩個執行緒或者程序之間實現通訊。

public

class

singletondemo

// 1. 可以加上 synchronized 保證執行緒安全

public

static singletondemo instance()

return singletondemo;

}public

static

void

main

(string[

] args)).

start()

;}}}

以上**建立的單例是非執行緒安全的!!!可以加上 synchronized 關鍵字,但是高併發下會有阻塞的情況,不推薦使用。

public

class

singletondemo

public

static singletondemo instance()

}}return singletondemo;

}public

static

void

main

(string[

] args)).

start()

;}}}

此處不加 volatile 可能執行緒不安全,因為有指令重排的情況,加入 volatile 可以禁止指令重排。

dcl單例模式

有時候我們需要對外呈現只有乙個物件,簡單來說就是講物件私有化,像資料那樣,只能通過get方法得到。這裡使用doublechecking來進行該操作,即在get方法裡面加入兩個判斷該物件是否為空,同時為了避免指令重排導致執行緒獲得空物件,加入volatile,而且私有化構造器。public class...

DCL單例模式

單例模式 外部不能new物件,類的內部有且只有乙個物件,僅僅用乙個靜態方法與外界進行互動。public class doublecheckedlocking 外部只能通過這個get方法和此物件進行交流 public static doublecheckedlocking getinstance 繫結...

單例模式的DCL問題

剛剛寫完靜態 塊問題,突然想到之前單例模式的坑,雖然解決辦法知道了,但是之前的原理不太明白,剛剛突然想清楚了。感謝大神 餓漢式 class single 私有化建構函式。private static single s new single 建立私有並靜態的本類物件。public static sin...