程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java單例形式進修示例

java單例形式進修示例

編輯:關於JAVA

java單例形式進修示例。本站提示廣大學習愛好者:(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;
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved