日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转- java单例模式几种实现方式

發(fā)布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转- java单例模式几种实现方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自: https://www.cnblogs.com/ngy0217/p/9006716.html ;

單例模式的五種實現(xiàn)方式

1、餓漢式(線程安全,調(diào)用效率高,但是不能延時加載):

1

2

3

4

5

6

7

public class ImageLoader{?

?????private static ImageLoader instance = new ImageLoader;?

?????private ImageLoader(){}?

?????public static ImageLoader getInstance(){??

??????????return instance;??

??????}?

}

一上來就把單例對象創(chuàng)建出來了,要用的時候直接返回即可,這種可以說是單例模式中最簡單的一種實現(xiàn)方式。但是問題也比較明顯。單例在還沒有使用到的時候,初始化就已經(jīng)完成了。也就是說,如果程序從頭到位都沒用使用這個單例的話,單例的對象還是會創(chuàng)建。這就造成了不必要的資源浪費(fèi)。所以不推薦這種實現(xiàn)方式。

2.懶漢式(線程安全,調(diào)用效率不高,但是能延時加載):

public class SingletonDemo2 {//類初始化時,不初始化這個對象(延時加載,真正用的時候再創(chuàng)建)private static SingletonDemo2 instance;//構(gòu)造器私有化private SingletonDemo2(){}//方法同步,調(diào)用效率低public static synchronized SingletonDemo2 getInstance(){if(instance==null){instance=new SingletonDemo2();}return instance;} }

3.Double CheckLock實現(xiàn)單例:DCL也就是雙重鎖判斷機(jī)制(由于JVM底層模型原因,偶爾會出問題,不建議使用):

1 public class SingletonDemo5 {2 private volatile static SingletonDemo5 SingletonDemo5;3 4 private SingletonDemo5() {5 }6 7 public static SingletonDemo5 newInstance() {8 if (SingletonDemo5 == null) {9 synchronized (SingletonDemo5.class) { 10 if (SingletonDemo5 == null) { 11 SingletonDemo5 = new SingletonDemo5(); 12 } 13 } 14 } 15 return SingletonDemo5; 16 } 17 }

4.靜態(tài)內(nèi)部類實現(xiàn)模式(線程安全,調(diào)用效率高,可以延時加載)

1 public class SingletonDemo3 {2 3 private static class SingletonClassInstance{4 private static final SingletonDemo3 instance=new SingletonDemo3();5 }6 7 private SingletonDemo3(){}8 9 public static SingletonDemo3 getInstance(){ 10 return SingletonClassInstance.instance; 11 } 12 13 }

5.枚舉類(線程安全,調(diào)用效率高,不能延時加載,可以天然的防止反射和反序列化調(diào)用)

1 public enum SingletonDemo4 { 2 3 //枚舉元素本身就是單例 4 INSTANCE; 5 6 //添加自己需要的操作 7 public void singletonOperation(){ 8 } 9 }

如何選用:

-單例對象 占用資源少,不需要延時加載,枚舉 好于 餓漢

-單例對象 占用資源多,需要延時加載,靜態(tài)內(nèi)部類 好于 懶漢式

總結(jié)

以上是生活随笔為你收集整理的转- java单例模式几种实现方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。