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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

单例模式(Java)

發(fā)布時(shí)間:2023/12/20 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单例模式(Java) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

其他寫法的單例模式就不多說了,主要說下多線程并發(fā)執(zhí)行情況下的單例模式。

為了多線程安全,該單例模式使用了 "雙檢鎖",防止數(shù)據(jù)被破壞。

單例模式只有一個(gè)實(shí)例,節(jié)省了資源,提高了效率。


public class Singleton {private Singleton() {}private volatile static Singleton instance;public static Singleton getInstance(){ if (null == instance){synchronized(Singleton.class){if (null == instance){instance = new Singleton();}}}return instance;} }

Double-Check概念對(duì)于多線程開發(fā)者來說不會(huì)陌生,如上述代碼中所示,我們進(jìn)行了兩次if (null == instance)的檢查,這樣就可以保證線程安全了。這樣,實(shí)例化代碼只用執(zhí)行一次,后面再次訪問時(shí),判斷if (null == instance),直接return實(shí)例化對(duì)象。使用volatile的目的是為了instance對(duì)所有線程是“透明的”,instance被修改之后其他線程在訪問instance時(shí)會(huì)使用修改后的值,告訴VM從內(nèi)存中讀取該對(duì)象的值,這牽涉到線程的內(nèi)存模型,請(qǐng)參考我后續(xù)的博客講解內(nèi)存模型。

優(yōu)點(diǎn):線程安全;延遲加載;效率較高。

有兩個(gè)問題需要注意:

? 1、如果單例由不同的類裝載器裝入,那便有可能存在多個(gè)單例類的實(shí)例。假定不是遠(yuǎn)端存取,例如一些servlet容器對(duì)每個(gè)servlet使用完全不同的類? 裝載器,這樣的話如果有兩個(gè)servlet訪問一個(gè)單例類,它們就都會(huì)有各自的實(shí)例。

? 2、如果Singleton實(shí)現(xiàn)了java.io.Serializable接口,那么這個(gè)類的實(shí)例就可能被序列化和復(fù)原。不管怎樣,如果你序列化一個(gè)單例類的對(duì)象,接下來復(fù)原多個(gè)那個(gè)對(duì)象,那你就會(huì)有多個(gè)單例類的實(shí)例。


總結(jié)

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

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