国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

五種單件模式之Singleton的實現(xiàn)方法詳解

2019-11-26 16:03:53
字體:
供稿:網(wǎng)友
最基本的實現(xiàn)方式如下:
復(fù)制代碼 代碼如下:

package singletonpattern;
public class Singleton1 {
 private static Singleton1 uniqueInstance;
 private Singleton1() {
 }
 public static Singleton1 getInstance() {
  if (uniqueInstance == null) {
   uniqueInstance = new Singleton1();
  }
  return uniqueInstance;
 }
}

但是以上方法并沒有考慮到多線程的情況,如果是多線程,仍有可能創(chuàng)建多個實例,因此可以通過加鎖和同步來實現(xiàn)多線程的單件模式,同步的缺點是效率大大降低:
復(fù)制代碼 代碼如下:

package singletonpattern;
public class Singleton2 {
 private static Singleton2 uniqueInstance;
 private Singleton2() {
 }
 public static synchronized Singleton2 getInstance() {
  if (uniqueInstance == null) {
   uniqueInstance = new Singleton2();
  }
  return uniqueInstance;
 }
}

還有一種方法是自動初始化,這樣肯定不會造成多個實例,但是如果實際沒有用到的話也會初始化實例,浪費了資源:
復(fù)制代碼 代碼如下:

package singletonpattern;
public class Singleton3 {
 private static Singleton3 uniqueInstance = new Singleton3();
 private Singleton3() {
 }
 public static Singleton3 getInstance() {
  return uniqueInstance;
 }
}

使用內(nèi)部類的方法可以解決過早初始化的問題:
復(fù)制代碼 代碼如下:

public class Singleton5 {

 private Singleton5(){

 }

 public static Singleton5 getInstance(){
  return Nested.instance;
 }

 static class Nested{
  static Singleton5 instance = new Singleton5();
 }
}

用于多線程的改進方法如下:
復(fù)制代碼 代碼如下:

package singletonpattern;
public class Singleton4 {
 private volatile static Singleton4 uniqueInstance;
 private Singleton4() {
 }
 public static Singleton4 getInstance() {
  if (uniqueInstance == null) {
   synchronized (Singleton4.class) {
    if (uniqueInstance == null) {
     uniqueInstance = new Singleton4();
    }
   }
  }
  return uniqueInstance;
 }
}

使用了雙重保險,雙重檢查,當沒有實例化的時候才進行加鎖和同步。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 惠东县| 庆云县| 渝中区| 鄂州市| 土默特右旗| 河北区| 开原市| 洪泽县| 乌兰县| 望谟县| 洮南市| 台东县| 南陵县| 轮台县| 黄大仙区| 开阳县| 泽库县| 全椒县| 怀集县| 叙永县| 冷水江市| 西吉县| 平南县| 墨玉县| 奉贤区| 怀安县| 岳阳县| 蒙阴县| 景东| 道孚县| 清徐县| 岑溪市| 普兰县| 石台县| 许昌县| 名山县| 辽阳县| 镶黄旗| 恩施市| 临西县| 郑州市|