通過double-check解決單例模式效率低的問題
單例模式的應用場景是在一個專案系統執行的過程中某一個類只被建立一次,也就是說只允許一個該類的一個物件存在。其實如果想實現這種目的有很多方法,這裡我之所以提及是因為我之前在使用單例模式的時候沒有注意到我的單例模式程式碼還有提高效率的空間,接下來將把我之前實現單例模式的程式碼和通過改進的程式碼列舉出來,通過對比指出之前的不足。
1)之前使用的單例模式,示例程式碼如下:
2)經過改進後的單例模式,示例程式碼如下:
通過上面的兩個單例模式進行對比,第一個單例模式的缺點是每次都要鎖定程式碼段,如果呼叫次數頻繁,那意味著每個執行緒都要鎖定MyLocker,就會造成效能下降。其實鎖定只要用到一次就可以,那一次就是在物件還沒有被建立的時候,如果這個時候發生執行緒併發,通過鎖可以有效的避免重複建立物件的問題。第二個單例模式就有效的提高了由於第一個單例模式導致的效率低下的問題,也就是說只有第一次初始化建立物件的時候在會鎖定MyLocker,之後都不會在鎖定。
相關推薦
通過double-check解決單例模式效率低的問題
單例模式的應用場景是在一個專案系統執行的過程中某一個類只被建立一次,也就是說只允許一個該類的一個物件存在。其實如果想實現這種目的有很多方法,這裡我之所以提及是因為我之前在使用單例模式的時候沒有注意到我的單例模式程式碼還有提高效率的空間,接下來將把我之前實現單例模式的程
設計模式之單例模式二(懶漢式double check)
上一篇文章中的懶漢式單例模式採用同步方法保證了執行緒安全,但是開銷很大,每次執行該方法都會檢查鎖。下面採用double check的方式進行改寫,下面這種實現看似可行,實則有缺陷,具體缺陷在後文分析: 注意上面第二幅圖中對lazyDoubleCheckSingl
單例模式的8種寫法及其分析 (推薦:double check,內部類,列舉的單例寫法)
單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到 餓漢式 和 懶漢式 這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。 簡介 單例模式是一種常用的軟體設計模式,其定義是
Double Check形式的單例模式
這兩天在看開源專案時,發現Event Bus和Universalimageloader中寫單例模式都是Double Check的形式。平時總是看到各種各樣的單例模式,如,餓漢式,懶漢式等等。其中大多存在問題。今天記錄一種比較優秀的單例模式的寫法------Double Ch
單例模式中的Double check lock
Double check lock package test; public class Singleton { public static Singleton singleton; private Singleton(){ }
Java 單例模式中使用雙重檢查(Double-Check)
在 Effecitve Java 一書的第 48 條中提到了雙重檢查模式,並指出這種模式在 Java 中通常並不適用。該模式的結構如下所示: public Resource getResource() { if (resource == null)
Java使用double check(雙重檢查)實現單例模式的一個小細節
public class Singleton { private static Singleton singleton; private Singleton() { } public static Singleton getIn
設計模式:單例模式介紹及8種寫法(餓漢式、懶漢式、Double-Check、靜態內部類、列舉)
# 一、餓漢式(靜態常量) 這種餓漢式的單例模式構造的步驟如下: 1. 構造器私有化;(防止用new來得到物件例項) 2. 類的內部建立物件;(因為1,所以2) 3. 向外暴露一個靜態的公共方法;(getInstance) 示例: ```java class Singleton{ //
JAVA設計模式-單例模式(Singleton)線程安全與效率
保存 ring 使用方法 部分 rac cheng 原因 cts 要求 一,前言 單例模式詳細大家都已經非常熟悉了,在文章單例模式的八種寫法比較中,對單例模式的概念以及使用場景都做了很不錯的說明。請在閱讀本文之前,閱讀一下這篇文章,因為本文就是按照這篇文章中的八種單例模
JAVA設計模式-單例模式(Singleton)執行緒安全與效率
一,前言 單例模式詳細大家都已經非常熟悉了,在文章單例模式的八種寫法比較中,對單例模式的概念以及使用場景都做了很不錯的說明。請在閱讀本文之前,閱讀一下這篇文章,因為本文就是按照這篇文章中的八種單例模式進行探索的。 本文的目的是:結合文章中的八種單例模式的寫法,使用實際的示例,來演示執行緒安全和效率
java單例模式並解決懶漢式下執行緒不安全的問題
單例模式中分為懶漢式和餓漢式 其中,懶漢式是執行緒不安全的,當有多條執行緒同時訪問單例物件時,則會出現多執行緒臨界資源問題。 現在用多執行緒實現並解決執行緒安全問題 餓漢式 public class SigletonDemo01 { static Ha
通過 python的 __call__ 函式與元類 實現單例模式
簡單一句話,當一個類實現__call__方法時,這個類的例項就會變成可呼叫物件。 直接上測試程式碼 class ClassA: def __call__(self, *args, **kwargs): print('call ClassA i
一個JAVA單例模式的典型錯誤應用的分析和解決方法
問題來自論壇,其程式碼如下:[java] view plain copy print?import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; imp
Java設計模式學習-單例模式的漏洞及解決辦法
通過對單例模式進行了學習,我們已經對單例模式已經有了一定的認識,但是不知道你們發現沒有,也存在幾個問題 反射可以破解上一篇部落格中的單例模式,其中不包含列舉單例模式。 反序列化也可以破解上一篇中的單例模式,其中也不包含列舉但離開模式。 那我們來看下
單例模式 靜態內部類 解決反射得到多個物件
首先這裡就不說單例模式的餓漢式,懶漢式了,如果需要請百度 比餓漢式,懶漢式好一點的是靜態內部類單例 這裡貼出程式碼 package com.test; public class SimpleTes
解決多執行緒單例模式的執行緒不安全問題
DCL雙檢查鎖機制 public class MyConfig { private volatile static MyConfig myConfig = null;//volatile
通過反射機制/反序列化破解單例模式
一、懶漢式單例 package edu.aeon.model.singleton; /** * 單例模式:懶漢式(類裝載及建立) * 步驟: * 1.構造器私有化(防止外部new) * 2.提供靜態的、私有的代表該物件的例項的空引用 * 3.提供靜態的、公
五種常見的單例模式及其效率測試
所謂單例模式就是不管你此時new多少新物件,它只會創建出一個物件供你使用。 最基礎的兩種單例模式是:餓漢式和懶漢式。 而還有三種常見的單例模式:雙重檢測鎖模式、靜態內部類實現和列舉類實現模式。 懶漢式: /** * 測試懶漢式單例模式 *
單例模式“雙重檢查鎖定Double-Checked Locking”執行緒安全問題
幾篇合集。 1 單例模式“雙重檢查鎖定Double-Checked Locking”執行緒安全問題 https://blog.csdn.net/wabiaozia/article/details/84723899 2 主題:用happen-before規則重新審視DCL h
c++中的 單例模式(singleton)和雙檢測鎖(Double-Checked Locking)
今天學習了一下c++中的singleton。google了一篇論文C++ and the Perils of Double-Checked Locking。大名鼎鼎的Scott Meyers寫的。論文使用c++講解,看了之後受益匪淺。 巧的是,讀完之後剛好看見http://