激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java單例模式學習示例

java單例模式學習示例

2019-10-30 17:05java技術網 JAVA教程

java中單例模式是一種常見的設計模式,單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種,下面提供了單例模式的示例

單例模式有一下特點:
1、單例類只能有一個實例。
2、單例類必須自己自己創建自己的唯一實例。
3、單例類必須給所有其他對象提供這一實例。
單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。在計算機系統中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每臺計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。總之,選擇單例模式就是為了避免不一致狀態,避免政出多頭。

首先看一個經典的單例實現。

復制代碼代碼如下:


public class Singleton {

 

private static Singleton uniqueInstance = null;

private Singleton() {

   // Exists only to defeat instantiation.

}

public static Singleton getInstance() {   if (uniqueInstance == null) {

       uniqueInstance = new Singleton();

   }

   return uniqueInstance;

}

// Other methods...
}

 

Singleton通過將構造方法限定為private避免了類在外部被實例化,在同一個虛擬機范圍內,Singleton的唯一實例只能通過getInstance()方法訪問。(事實上,通過Java反射機制是能夠實例化構造方法為private的類的,那基本上會使所有的Java單例實現失效。此問題在此處不做討論,姑且掩耳盜鈴地認為反射機制不存在。)

但是以上實現沒有考慮線程安全問題。所謂線程安全是指:如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的。或者說:一個類或者程序所提供的接口對于線程來說是原子操作或者多個線程之間的切換不會導致該接口的執行結果存在二義性,也就是說我們不用考慮同步的問題。顯然以上實現并不滿足線程安全的要求,在并發環境下很可能出現多個Singleton實例。

 

復制代碼代碼如下:


//餓漢式單例類.在類初始化時,已經自行實例化
public class Singleton1 {
//私有的默認構造子
private Singleton1() {}
//已經自行實例化
private static final Singleton1 single = new Singleton1();
//靜態工廠方法
public static Singleton1 getInstance() {
return single;
}
}

 

//懶漢式單例類.在第一次調用的時候實例化
public class Singleton2 {
//私有的默認構造子
private Singleton2() {}
//注意,這里沒有final
private static Singleton2 single=null;
//靜態工廠方法
public synchronized static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}

 

延伸 · 閱讀

精彩推薦
  • JAVA教程Java泛型的簡單實例

    Java泛型的簡單實例

    這篇文章介紹了Java泛型的簡單實例,有需要的朋友可以參考一下 ...

    java技術網4932019-10-16
  • JAVA教程java jdk動態代理詳解

    java jdk動態代理詳解

    動態代理類的Class實例是怎么生成的呢,是通過ProxyGenerator類來生成動態代理類的class字節流,把它載入方法區 ...

    java技術網1352019-10-14
  • JAVA教程scala中常用特殊符號詳解

    scala中常用特殊符號詳解

    這篇文章主要介紹了scala中常用特殊符號詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨...

    咸魚2342019-07-08
  • JAVA教程des加密解密JAVA與.NET互通實例

    des加密解密JAVA與.NET互通實例

    這篇文章主要介紹了des加密解密JAVA與.NET互通實例,大家參考使用吧 ...

    java技術網2612019-10-25
  • JAVA教程java jni調用c函數實例分享(java調用c函數)

    java jni調用c函數實例分享(java調用c函數)

    Java代碼中調用C/C++代碼,當然是使用JNI,JNI是Java native interface的簡寫,可以譯作Java原生接口,下面看實例吧 ...

    java教程網1442019-10-26
  • JAVA教程JAVA8 十大新特性詳解

    JAVA8 十大新特性詳解

    本教程將Java8的新特新逐一列出,并將使用簡單的代碼示例來指導你如何使用默認接口方法,lambda表達式,方法引用以及多重Annotation,之后你將會學到最新...

    網絡4712019-06-17
  • JAVA教程如何使用Java生成具有安全哈希的QR碼

    如何使用Java生成具有安全哈希的QR碼

    這篇文章主要介紹了如何使用Java生成具有安全哈希的QR碼,這是關于如何在Java中使用salt生成QR代碼和安全散列字符串的分步教程。,需要的朋友可以參考下...

    Java_蘇先生5032019-06-29
  • JAVA教程java web項目實現文件下載實例代碼

    java web項目實現文件下載實例代碼

    現在項目里面有個需求,需要把系統產生的日志文件給下載到本地 先獲取所有的日志文件列表,顯示到界面,選擇一個日志文件,把文件名傳到后臺 ...

    java代碼網2272019-10-15
主站蜘蛛池模板: 成人毛片视频免费看 | 最新午夜综合福利视频 | 久久精品视频69 | 激情视频日韩 | 91成人免费网站 | 欧美毛片免费观看 | 国产一区毛片 | 国产美女视频一区二区三区 | 亚洲婷婷日日综合婷婷噜噜噜 | 91看片淫黄大片欧美看国产片 | 亚洲综合视频网 | 伊人yinren22综合网色 | 国产精品探花在线观看 | 中文字幕在线成人 | 欧美亚成人 | 视频一区二区三区中文字幕 | 蜜桃视频日韩 | 久久国产综合精品 | 国产精品视频免费在线观看 | 91资源在线观看 | 亚洲一区二区三区日本久久九 | 毛片免费视频网站 | 99亚洲国产精品 | 免费黄网站在线播放 | 性欧美在线视频 | 美女羞羞视频在线观看 | 欧美一级黄| 91毛片网站 | 国产成人视屏 | 日本看片一区二区三区高清 | 91短视频网页版 | 91福利社在线 | 国产色片 | 国产亚洲精品久久久久久久久久 | 国产精品嘿咻嘿咻在线播放 | 九九精品免费 | 日本免费靠逼视频 | 欧美日本免费一区二区三区 | 国产精品9191 | 国产精品一区在线看 | 精品国产一级毛片 |