淺談多執行緒中的懶漢式單例
1.場景:我們都知道在應用開發中有時會使用到單例設計模式,那麼今天我們就淺談一下單例中的一種-懶漢式。
顧名思義懶漢式其實是一個很有意思的名字,懶漢在我們開發中常說的用到了才去建立物件。此種生成方式遇到多執行緒又會擦出怎樣的火花呢?
public class Singleton{
private Singleton(){}
private static Singleton singleton = null; //不建立物件
public static synchronized Singleton getInstance(){ if(singleton == null) { //先判斷是否為空 singleton = new Singleton (); //懶漢式做法
}
return singleton ;
}
}
public class testDemo {
public static void main(String[] args) {
myThread m = new myThread();
Thread s = new Thread(m);
Thread s1 = new Thread(m);
s.start();
s1.start();
}}//如上圖所示:
詳細解析:
當執行緒呼叫獲取例項方法時呼叫同步的getInstance方法獲取例項,大家知道獲取鎖的同時會影響效率問題,那麼在此基礎上我們儘可能的提高效率,所以優化如下:
class signal{
private static signal s;
public signal(){}
public static signal getInstance(){
if( s == null){
synchronized (signal.class) {
if(s == null){
s = new signal();
}
}
}
return s;
}
}
如果實力不為空則直接返回該物件,從而一定程度上提高效率
相關推薦
淺談多執行緒中的懶漢式單例
1.場景:我們都知道在應用開發中有時會使用到單例設計模式,那麼今天我們就淺談一下單例中的一種-懶漢式。 顧名思義懶漢式其實是一個很有意思的名字,懶漢在我們開發中常說的用到了才去建立物件。此種生成方式遇到多執行緒又會擦出怎樣的火花呢? public class Singlet
淺談多執行緒安全問題
下面我們還是用看電影賣票的案例來談一談多執行緒安全的問題。 方案一:使用同步程式碼塊 //實現賣票案例 /* 賣票案例出現執行緒安全問題 解決方案一:使用同步程式碼塊 格式: synchronized(鎖物件){ 可能會出現執行緒安全問題的程式
淺談多執行緒之鎖的機制
Java中鎖的機制 synchronized–Java語言的關鍵字,當它用來修飾一個方法或者一個程式碼塊的時候,能夠保證在同一時刻最多隻有一個執行緒執行該段程式碼。 當兩個併發執行緒訪問同一個物件Object中的這個synchronized同步程式碼塊時,
水滴石穿--多執行緒原子操作、threadlocal、volatile、多執行緒下的單例模式
接著上一篇文章,下面看看幾個比較好理解的知識點!! volatile java關鍵字volatile修飾的變數從字面意義上理解易變的,不穩定的,事實上時告訴編譯器該變數是易變的不要對該變數使用快取等級的優化,每次都從記憶體地址中讀取值。 不過並沒有說明在對volatile修飾的變數進行修
類的多執行緒下實現單例類
這兩天在看自己之前寫的程式碼,所以正好把用過的東西整理一下,單例模式,在日常的程式碼工作中也是經常被用到, 所以這裡把之前用過的不同方式實現的單例方式整理一下
java叢集優化——多執行緒下的單例模式
在最初學習設計模式時,我為絕佳的設計思想激動不已,在以後的工程中,多次融合設計模式,而在當下的設計中,我們已經覺察出了當初設計模式的高瞻遠矚,但是也有一些不足,需要我們去改進,有人說過
多執行緒 繼承Thread類 實現Runnable介面 多執行緒安全 synchronized 單例設計懶漢 鎖死
程序 是一個正在執行中的程式。 每個程序執行都有一個執行順序,該順序是一個執行路徑,或者叫一個控制單元。 舉例子:一個程序,就是一個正在執行的程式。 執行緒 就是程序中的一個獨立的控制單元。 執行緒在
多執行緒核心技術-單例模式
單例模式在設計模式中比較常見,在多執行緒訪問的時候容易出現執行緒不安全的隱患懶漢式(延遲載入)/餓漢式(立即載入)直接給出雙檢查鎖單例模式public class Singleton { private static Singleton instance;
Java多執行緒知識點總結——進階篇(五)之多執行緒下的單例模式
餓漢式 餓漢式多執行緒和單執行緒的程式碼是一樣的,如下: class Single { private static final Single s = new Single(); p
C# 單執行緒和多執行緒下的單例模式的實現
該單例模式是執行緒不安全的,只能在單執行緒下執行,在多執行緒中如果被兩個執行緒同時呼叫Instance屬性時,此時兩個執行緒判斷 if (_instance==null)時都會返回true,就會建立兩個例項。public class Singleton{ /// <
多執行緒下的單例模式
簡介: 保證一個類僅有一個例項,並提供一個該例項的全域性訪問點。《設計模式》GoF 動機 在軟體系統中,經常有這樣一個特殊的類,必須保證它們在系統中只存在一個示例,才能確保它們的邏輯正確性、以及良好的效率。這個應該類設計者的責任,而不是使用者的
一種多執行緒安全的單例模式
template <typename T> class StaticSingletonT { public: static T* SafeInstance() { static T* s_instance_ptr = NULL; if (!s_i
Java基礎:多執行緒下的單例模式
單例物件(Singleton)是一種常用的設計模式。在Java應用中,單例物件能保證在一個JVM中,該物件只有一個例項存在。但在多執行緒環境下,就可能會產生問題,並不一定能保證只有一個例項。具體問題描述和解決方法如下。 /* * 多執行緒下
python多執行緒安全的單例模式
常用的軟體設計模式有23種,單例模式便是其中的一種。那麼在面向過程的語言中,我們常常用到全域性變數。其實單例模式和全域性變數在某種意義上來說近似。譬如我們要讀取某些配置檔案,有一個專門的類來封裝好了,但是如果不用單例模式,會造成程式例項化很多配置檔案類的物件,這樣的話
c++靜態程式碼實現多執行緒安全的單例模式
開發十年,就只剩下這套架構體系了! >>>
Java多執行緒-----單例模式在多執行緒中的使用用問題
1.餓漢模式(立即載入模式)與多執行緒 不管需不需要用到例項都要去建立例項,即在類產生的時候就建立好例項 package com.thread; /** * 餓漢模式 * * @author yyx 2018年12月28日 */ public cl
單例模式在多執行緒中的安全性研究
概述 關於一般單例模式的建立和分析在我的另一篇部落格《Java設計模式——單件模式》中有詳細說明。只是在上篇部落格中的單例是針對於單執行緒的操作,而對於多執行緒卻並不適用,本文就從單例模式與多執行緒安全的角度出發,講解單例模式在多執行緒中應該如何被使用。
餓漢式單例模式在多執行緒中併發訪問的解決方案
/** * 懶漢式 如果在多執行緒重會出現執行緒安全問題 * */ class Sing {private static Sing sin = null;private Sing() {}// 通過同步鎖直接就可以解決執行緒安全問題 這裡屬於的是靜態的所以這裡的//
Java多執行緒中Synchronized簡介和Static Synchronized的區別
在進行Java開發時,多執行緒的開發是經常會使用的。首先會問一個小問題啊,在Java中有幾種方法可以建立一個執行緒? 我給的答案是3種。(如果還有其他的請留言告訴我哈。) 1、建立直接繼承自Thread類建立執行緒子類。 步驟如下:a 定義一個子類,同時
Qt中實現執行緒安全的單例模式
之前專案中用到單例模式,用的是執行緒不安全的,這次專案用到了多執行緒,所以想到實現一個執行緒安全的單例模式。經過查詢資料,發現Qt本身有自己的執行緒安全單例模式實現方式。 Q_GLOBAL_STATIC巨集 使用方法:MonitorWindow.h #ifndef MONITORW