Java中四種常見的單例模式以及各自優缺點總結
餓漢式單例模式程式碼中,static變數會在類裝載時初始化,此時也不會涉及多個執行緒物件訪問該物件的問題。虛擬機器保證只會裝載一次該類,肯定不會發生併發訪問的問題。因此,可以省略synchronized關鍵字。問題:如果只是載入本類,而不是呼叫getInstance(),甚至永遠沒有呼叫,則會造成資源浪費!
懶漢式(單例物件延時載入):
要點:lazy load! 延時載入,懶載入!真正用的時候才載入!
問題:資源利用率高了。但是,每次呼叫getInstance()方法都要同步,併發效率低。
靜態內部類實現方式(也是一種懶載入方式):
要點:外部類沒有static屬性,則不會像餓漢式那樣立即載入物件。
只有真正呼叫getInstance(),才會載入靜態內部類。載入類時是執行緒安全的。instance是static final型別,保證了記憶體中只有這樣一個例項存在,而且只能被賦值一次,從而保證了執行緒安全性兼備了併發高效呼叫和延遲載入的優勢!
列舉式:
執行緒安全、呼叫效率高,但不能延時載入,並且可以天然的防止反射和反序列化漏洞!
單例物件 佔用資源少,不需要延時載入:
列舉式 好於餓漢式
單例物件 佔用資源大,需要延時載入:
靜態內部類式好於懶漢式
相關推薦
Java中四種常見的單例模式以及各自優缺點總結
餓漢式實現:餓漢式單例模式程式碼中,static變數會在類裝載時初始化,此時也不會涉及多個執行緒物件訪問該物件的問題。虛擬機器保證只會裝載一次該類,肯定不會發生併發訪問的問題。因此,可以省略synchronized關鍵字。問題:如果只是載入本類,而不是呼叫getInstan
單例模式的四種方式 單例模式的四種方式
單例模式的四種方式 一、內容 保證一個類只有一個例項,並提供一個訪問它的全域性訪問點 二、角色
JAVA中四種常見建立物件方法
一、使用new關鍵字 這是我們最常見的也是最簡單的建立物件的方式,通過這種方式我們還可以呼叫任意的夠贊函式(無參的和有參的)。 比如:Student student = new Student(); 二、呼叫物件的clone的方法 無論何時我們呼叫一
java中最嚴謹的單例模式的實現方式
現在很多有關java的書籍、視訊、部落格等有講解java中的單例模式的實現,但是遺憾的是,很多講的都不是完全嚴謹的。 java中一個嚴謹的單例模式應該包含以下幾個方面: 1.有一個private型別靜態例項,從而防止從外部直接訪問; 2.建構函式必須是private的,防止
python中7種實現單例模式的方法:staticmethod、classmethod、類屬性方法、__new__、裝飾器、元類、名字覆蓋
本文的以下實現方法為了簡單起見不考慮執行緒安全。 一:staticmethod 程式碼如下: class Singleton(object): instance = None def __init__(self): raise Syntax
Java中的10個單例模式訪問問題
什麼是Singleton類?你之前用過Singleton嗎?Singleton是一個類,在整個應用程式中只有一個例項,並提供一個getInstance()方法來訪問單例例項。在JDK中有許多類是使用Singleton模式實現的,如java.lang.Runtime,它提供了getRuntime()方法來訪問它
Java基礎 Runtime 用了單例模式中的餓漢式
face ring lang run ice ffi new es2017 obj 禮悟: 好好學習多思考,尊師重道存感恩。葉見尋根三返一,活水清源藏於零。 虛懷若谷良心主,皓月當空自在王。願給最苦行無悔,誠勸且行且珍惜。
關於JAVA你必須知道的那些事(四):單例模式和多型
好吧,今天一定要把面向物件的最後一個特性:多型,給說完。不過我們先來聊一聊設計模式,因為它很重要。 設計模式 官方的解釋是,設計模式是:一套被反覆使用,多數人知曉的,經過分類編目,程式碼設計經驗的總結。說人話就是:軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。 常見的設計模式可以
Java 設計模式(四):單例模式
參考連結:單例模式-Singleton Pattern 對於一個軟體系統的某些類而言,我們無須建立多個例項。舉個大家都熟知的例子——Windows工作管理員,如圖所示: 通常情況下,無論我們啟動任務管理多少次,Windows系統始終只能彈出一個工作管理員視窗。為什麼要這樣設計呢?我
JAVA三種實現單例模式方法(二):使用靜態內部類實現單例設計模式
靜態程式碼塊和靜態內部類的載入順序:當呼叫外部類的建構函式是,外部類的靜態程式碼塊同時被載入,但是其內部類不會同時被載入;當且僅當內部類的靜態域或其構造方法或其靜態方法被呼叫時,內部內才被載入。 因此,通過內部內實現單例,就能實現延遲載入。 這個解決方案被稱為Lazy i
Java設計模式(二):單例模式的5種實現方式,以及在多執行緒環境下5種建立單例模式的效率
這段時間從頭溫習設計模式。記載下來,以便自己複習,也分享給大家。 package com.iter.devbox.singleton; /** * 餓漢式 * @author Shearer * */ public class SingletonDemo1 {
JAVA中的餓漢式和飽漢式單例模式及jdk中Runtime類的單例模式實現方式詳解
一、描述 單例模式是一種非常常見的設計模式,即一個類只能有一個物件(例項),一般通過將該類的構造器私有化,來阻止在該類外建立該類的物件,並提供給外界一個唯一的物件(這個物件在該類中建立)。 java中的單例模式常見的有兩種實現方式,一種是惡漢方式,即將該類物件
java中四種訪問修飾符
pub oid 默認 成員變量 修飾 對象 fault 其中 () Java中的四種訪問修飾符:public、protected、default(無修飾符,默認)、private。 四種修飾符可修飾的成分(類、方法、成員變量) public protect
Java中四種引用的區分
isn 賦值 public medium 是否 comm 回調 ant container 強引用(StrongReference) 強引用就是指在程序代碼之中普遍存在的,比如下面這段代碼中的object和str都是強引用: 1 2 Object obje
java中四種訪問修飾符區別及詳解全過程
HP dnv ax1 pci gda fmm utc dos rdp 客戶端程序員:即在其應用中使用數據類型的類消費者,他的目標是收集各種用來實現快速應用開發的類。 類創建者:即創建新數據類型的程序員,目標是構建類。 訪問控制存在的原因:a、讓客戶端程序員無法觸
java中四種修飾符(private、default、protected、public)的訪問權限
ble ted span java 修飾符 20px col family style 權限如下: no. 範圍 private default protected public 1 同一包下的同一個類 √ √ √ √ 2 同一包下的不同類 × √ √ √
Java中幾種常見的NPE問題
avi oar 返回 對象 [] 報錯 不能 alt public 1、Map下的NPE 直接上代碼: public class User { private Integer id; private String name;
基礎 | Java中四種引用的區別
在JDK 1.2以前,Java中的引用定義為:如果引用型別的資料中儲存的數值代表的是另一塊記憶體的起始地址,則這塊記憶體即代表著一個引用。故在該定義下,一個Java物件僅有被應用和未被引用兩種狀態。 在JDK 1.2之後,Java對引用的概念進行了擴充,將引用分為強引用、軟引用
Java基礎-static關鍵字和單例模式
static關鍵字 static關鍵字的特點 用來修飾類的成員-修飾成員變數的稱之為類變數(靜態變數),修飾成員方法的稱之為類方法(靜態方法)。(屬性拿static修飾完之後就不叫屬性了,他也就不屬於任何物件了,而是屬於多個物件共享的,就叫類變數或靜態變數,方法也一樣)
JAVA中四種操作xml方式的比較
. 介紹 1)DOM(JAXP Crimson解析器) DOM是用與平臺和語 言無關的方式表示XML文件的官方W3C標準。DOM是以層次結構組織的節點或資訊片斷的集合。這個層次結構允許開發人員在樹中尋找 特定資訊。分析該結構通常需要載入整個文件和構造層次結構,然後才能做任何工作。由於它是基於資訊層次