多執行緒案例之單例模式

2021-10-07 05:29:56 字數 1243 閱讀 8550

一、「 餓漢 」 模式

在類載入的時候就立即例項化物件

// 「餓漢」模式-------執行緒安全

static

class

singleton

public

static singleton instance =

newsingleton()

;public

static singleton getinstance()

}

」 餓漢 「 模式,因為只有讀資料操作,執行緒安全

二、「 懶漢 」 模式

只在首次呼叫 getinstance 時才例項化物件

//  「懶漢模式」-------對於例項建立好之前,執行緒不安全

static

class

singleton

private

static singleton instance = null;

public

static singleton getinstance()

return instance;

}

「 懶漢 」 模式效率較高於 「 餓漢 」 模式

但是 「 懶漢 」模式在例項化之前涉及多執行緒修改,是不安全的,但是在例項化之後,就安全了

為了保證執行緒安全,進行以下操作

1、加鎖,來保證判斷和例項化是原子的

2.、雙重 if,來避免例項化以後,再呼叫 getinstance 時頻繁觸發不必要的鎖操作

3、volatile 來保證記憶體可見性

// 等到第一次使用這個例項時再例項化,效率較高(有鎖後,效率就低了)

static

class

singleton

//類載入時沒有例項化,第一次呼叫時才例項化 ,相當於「延時載入」

// private static singleton instance = null;

// 為了保證記憶體可見,在 instance 前加 volatile

private

volatile

static singleton instance = null;

public

static singleton getinstance()

}}return instance;

}}

多執行緒 單例模式之懶漢

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

多執行緒 單例模式

單例模式 是非常典型常用的一種設計模式 乙份資源只能被申 載一次 單例模式的方法建立的類在當前程序中只有乙個例項 資源的程式初始化的時候就去載入,後面使用的時候直接使用,使用的時候比較流暢,有可能會載入用不上的資源,導致程式初始化時間比較慢。include class single instance...

單例模式多執行緒

單例模式 確保某個類只有乙個例項化物件 import time class a from threading import lock instance none lock lock def new cls,args,kwargs 加鎖確保時間片不發生輪轉 with cls.lock ifnot cl...