一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

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

java單例模式學習示例

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

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

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

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

復制代碼代碼如下:


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單例實現失效。此問題在此處不做討論,姑且掩耳盜鈴地認為反射機制不存在。)

但是以上實現沒有考慮線程安全問題。所謂線程安全是指:如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的?;蛘哒f:一個類或者程序所提供的接口對于線程來說是原子操作或者多個線程之間的切換不會導致該接口的執行結果存在二義性,也就是說我們不用考慮同步的問題。顯然以上實現并不滿足線程安全的要求,在并發環境下很可能出現多個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
主站蜘蛛池模板: 久久黄色录像 | 亚洲色图2 | 被强上后我成瘾了小说 | 亚洲黄色高清 | 日本阿v在线播放 | 五月最新商场女厕所高跟嘘嘘 | 亚洲国产区 | 久久久精品免费视频 | 无码国产成人777爽死 | 免费真实播放国产乱子伦 | 校园全黄h全肉细节文 | 古代翁熄系小说辣文 | 午夜亚洲WWW湿好爽 午夜想想爱午夜剧场 | 狠狠草视频 | 亚洲春黄在线观看 | 3p文两男一女办公室高h | 国产欧美精品一区二区三区四区 | 我的妹妹最近有点怪免费播放 | 91青青国产在线观看免费 | avidolz性教师 | 日韩精品视频福利资源站 | 高清一区高清二区视频 | 精品国产一区二区在线观看 | 精品高潮呻吟99AV无码视频 | 99久久久无码国产精品 | 奇米影视久久777中文字幕 | 国产极品久久 | 视频在线91 | 日本美女xx | 国产成人愉拍免费视频 | 五月色天在线视频综合观看 | 国产精品国产三级国产专区不 | 亚洲成色爱我久久 | 国产九九视频在线观看 | 午夜免费小视频 | 亚洲九九九 | 九哥草逼网 | 日韩欧美在线看 | 2012在线观看免费视频大全 | 日韩欧美国产免费看清风阁 | 性xxxx欧美高清 |