JAVA單例模式6種寫法(附反射破壞單例)
java中單例模式是一種常見的設計模式,單例模式的寫法有多種,這裡主要介紹6種寫法:餓漢式單例、懶漢式單例3個、靜態內部類,列舉。
單例模式有以下特點:
1、單例類只能有一個例項。
2、單例類必須自己建立自己的唯一例項。
3、單例類必須給所有其他物件提供這一例項。
一.單例寫法
<1>餓漢式單例
//餓漢式單例類.在類初始化時例項化
public class Singleton {
private Singleton() {}
private static final Singleton single = new Singleton();
//靜態工廠方法
public static Singleton getInstance() {
return single;
}
}
此種方式在類載入的時候就初始化例項,沒有達到懶載入的效果,但是,它是執行緒安全的
<2>懶漢式1
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null ) {
instance = new Singleton();
}
return instance;
}
}
實現懶載入,不是執行緒安全的
<3>懶漢式2(同步方法)
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null ) {
instance = new Singleton();
}
return instance;
}
}
使用同步方法形式,實現懶載入和執行緒安全,但是效率很低,多數情況下並不需要同步。
<4>懶載入3(雙重校驗鎖)
public class Singleton {
private static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
實現懶載入,執行緒安全,效率與同步方法形式有提高
<5>靜態內部類
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
這種比懶漢形式要好一些,既實現了執行緒安全,又避免了同步帶來的效能影響。
<6>列舉形式
public enum Singleton {
INSTANCE;
//任意方法,呼叫時使用INSTANCE.方法名
public void whateverMethod() {
}
}
程式碼少,又實現了執行緒安全,又可避免反射破壞單例模式。
總結:還有一種登記式單例,以後學習。沒有如果懶載入要求可使用餓漢式。執行緒安全懶載入使用靜態內部類,涉及反序列化建立物件使用列舉。如果使用熟練列舉是個不錯的選擇,程式碼很簡單。
備註:連結中防止破壞單例程式碼標誌位flag設定有問題;
相關推薦
JAVA單例模式6種寫法(附反射破壞單例)
java中單例模式是一種常見的設計模式,單例模式的寫法有多種,這裡主要介紹6種寫法:餓漢式單例、懶漢式單例3個、靜態內部類,列舉。 單例模式有以下特點: 1、單例類只能有一個例項。 2、單例類必須自己建立自己的唯一例項。 3、單例類必須給
Java氣泡排序的6種寫法(1)
/** * */ package ch02; /** * @author Administrator *sorting algorithm */ public class javaData1 { // public static void sw
java 單例模式5種寫法
浪費 get public color ring 缺點 threads 構造函數 java 單例模式 學習整理 飽漢模式(懶漢模式) 1 // 飽漢 2 // UnThreadSafe 3 public class Singleton1 { 4 private
面試題(單例模式兩種寫法)
第一種形式:餓漢式單例 public class Singleton { private Singleton(){} private static Singleton i
單例模式幾種寫法
遺憾 想象 develop 由於 tcl loader adr 希望 線程不安全 第一種(懶漢,線程不安全): Java代碼 public class Singleton { private static Singleton instance;
模式--單例模式8種寫法
單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到 餓漢式 和 懶漢式 這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。 簡介 單例模
單例模式五種寫法
單例模式算是設計模式中最容易理解,也是最容易手寫程式碼的模式了吧。但是其中的坑卻不少,所以也常作為面試題來考。本文主要對幾種單例寫法的整理,並分析其優缺點。很多都是一些老生常談的問題,但如果你不知道如何建立一個執行緒安全的單例,不知道什麼是雙檢鎖,那這篇文章可能會幫助到你。 1、懶漢式(執
單例模式8種寫法
1、餓漢式(靜態常量)[可用] public class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton(){} public sta
單例模式6種實現方式
一:餓漢式public class MyObject { // 立即載入方式==餓漢模式 private static MyObject myObject = new MyObject();
單例 模式7種寫法
第一種(懶漢,執行緒不安全): 1 publicclass Singleton { 2 privatestatic Singleton instance; 3 privateSingleton (){} 4 publicstatic Single
單例模式6種實現及利弊分析
[TOC] # 單例模式6種實現及利弊分析 單例模式三要素 - **私有的構造方法;** - **指向自己例項的私有靜態引用;** - **以自己例項為返回值的靜態的公有方法** ## **1.餓漢式** ```java public class Singleton { private
單例的幾種方式,以及如何破壞單例,使用枚舉保護單例;
des new 如果 auth 變量 ins 方式 break 時機 1、基礎入門單例: 1 public class Singleton { 2 private Singleton(){ 3 System.out.println("Sing
JAVA構造物件的幾種方式(構建器、構造器)
大家好,我是烤鴨: 今天說一下初始化物件的幾種方式: 1. 多引數構造器 2. 構建器 3. 構造器後 + get/set方法舉個例子: 這裡有個機構entity,提供一個預設構造器package com
設計模式 - 單例模式之多執行緒除錯與破壞單例
前言 在之前的 設計模式 - 單例模式(詳解)看看和你理解的是否一樣? 一文中,我們提到了通過Idea 開發工具進行多執行緒除錯、單例模式的暴力破壞的問題;由於篇幅原因,現在單獨開一篇文章進行演示:執行緒不安全的單例在多執行緒情況下為何被建立多個、如何破壞單例。 如果還不知道如何使用IDEA工具進行執行緒模
3.7 Java之列印流和資料流(附字元位元組流練習)
列印流 例項 資料流 資料流輸出 資料流輸入 字元位元組流練習 位元組流輸出 字元流輸出
單例設計模式的幾種寫法(java版本、超詳細)
簡介 單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許一個例項存在。這篇部落格很精彩哦,請一定要耐心看完哦 在Java設計模式中,單例模式相對來說算是比較簡單的一種構建模式。適用的場景在於:對於定義的一個類,在整個應用程式執行期間只有唯一的一個例項物件。如Android中常見的
單例模式的6種寫法及不同(精華版)
1、懶漢模式。執行緒不安全,但可以延遲 【不推薦,不使用】 <span style="font-size:12px;">public class Singleton1 { private static Singleton1 singleton1=nul
java:單例模式的七種寫法(轉)
單例模式是面向物件中不可缺少的一種設計模式。只要是寫過面向物件程式的人都知道。轉自:http://www.blogjava.net/kenzhh/archive/2013/03/15/357824.html第一種(懶漢,執行緒不安全): 1 publicclass Singleton { 2 priva
Java併發程式設計中的設計模式解析(二)一個單例的七種寫法
Java單例模式是最常見的設計模式之一,廣泛應用於各種框架、中介軟體和應用開發中。單例模式實現起來比較簡單,基本是每個Java工程師都能信手拈來的,本文將結合多執行緒、類的載入等知識,系統地介紹一下單例模式的演變,並體現在7種不同的單例設計中。說到這個,非常像孔乙己裡那個“回字有四種寫法”的梗,不過與封建迂腐
設計模式:單例模式介紹及8種寫法(餓漢式、懶漢式、Double-Check、靜態內部類、列舉)
# 一、餓漢式(靜態常量) 這種餓漢式的單例模式構造的步驟如下: 1. 構造器私有化;(防止用new來得到物件例項) 2. 類的內部建立物件;(因為1,所以2) 3. 向外暴露一個靜態的公共方法;(getInstance) 示例: ```java class Singleton{ //