最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2013年06月04日 17:00:36   作者:  
本篇文章是對Singleton的實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
最基本的實現(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)多線程的單件模式,同步的缺點(diǎ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èi)了資源:
復(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();
 }
}

用于多線程的改進(jìn)方法如下:
復(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;
 }
}

使用了雙重保險,雙重檢查,當(dāng)沒有實例化的時候才進(jìn)行加鎖和同步。

相關(guān)文章

最新評論

高尔夫| 勐海县| 泸州市| 冀州市| 永胜县| 郑州市| 尤溪县| 德令哈市| 大宁县| 札达县| 宁武县| 繁昌县| 丰顺县| 阿瓦提县| 依兰县| 阳高县| 东宁县| 翁牛特旗| 临沂市| 荥经县| 日照市| 镇原县| 景宁| 广德县| 石首市| 天门市| 雷州市| 海丰县| 武强县| 武穴市| 隆安县| 广宁县| 本溪| 丘北县| 固阳县| 云龙县| 建昌县| 修武县| 大同县| 桐城市| 公安县|