Java設(shè)計(jì)模式之單例模式簡(jiǎn)析
什么是單例模式?
單例模式是常用的設(shè)計(jì)模式,在我們的系統(tǒng)乃至在框架中都普遍被用到,單例模式就是使一個(gè)類有且只有一個(gè)實(shí)例用于外部訪問,這樣大大的節(jié)省了系統(tǒng)的資源,而單例模式需要注意的也就以下三點(diǎn):
- 保證這個(gè)類有且只有一個(gè)實(shí)例
- 自行創(chuàng)建這個(gè)實(shí)例
- 提供這個(gè)實(shí)例供外部訪問
代碼實(shí)現(xiàn)需要注意的就是
- 單例模式的類構(gòu)造方法私有化
- 這個(gè)類的定義中包含自己的一個(gè)靜態(tài)實(shí)例對(duì)象
- 提供一個(gè)共有靜態(tài)方法供外部調(diào)用
三種實(shí)現(xiàn)方式
1、懶漢式
懶漢式與延遲初始化有些相似,就是沒人用的時(shí)候我不實(shí)例化出來(lái),有人需要調(diào)用了我再實(shí)例化出來(lái),JAVA代碼實(shí)現(xiàn)如下
public class SingletonClz{ //實(shí)例 private static SingletonClz instance = null; //私有構(gòu)造 private SingletonClz(){} //外部調(diào)用方法 public static getInstance() { if(null == instance) { instance = new SingletonClz(); return instance; } else { return instance; } } }
2、餓漢式
先實(shí)例化出來(lái),有人用就直接返回即可
public class SingletonClz{ //實(shí)例 private final static SingletonClz INSTANCE = new SingletonClz(); //私有構(gòu)造 private SingletonClz(){} //外部調(diào)用方法 public static getInstance() { return instance; } }
3、加鎖的單例模式
public class SingletonClz{ //實(shí)例 private static SingletonClz instance = null; //私有構(gòu)造 private SingletonClz(){} //外部調(diào)用方法 public static getInstance() { synchronized(SingletonClz.class) { if(null == instance) { instance = new SingletonClz(); } } return instance; } }
這里加一個(gè)重量級(jí)的鎖是為了防止并發(fā)的情況下兩個(gè)線程同時(shí)訪問這個(gè)方法同時(shí)發(fā)現(xiàn)instace為null,就都跑去實(shí)例化這個(gè)對(duì)象了。
加了一個(gè)synchronized鎖就防止了這一情況的發(fā)生,當(dāng)有一個(gè)線程拿到了鎖,另一個(gè)就阻塞在外面知道鎖的釋放,當(dāng)線程A實(shí)例化完成并釋放鎖后,B進(jìn)來(lái)發(fā)現(xiàn)instace不等于空了,就不會(huì)再去實(shí)例化了。
到此這篇關(guān)于Java設(shè)計(jì)模式之單例模式簡(jiǎn)析的文章就介紹到這了,更多相關(guān)Java單例模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springmvc4+hibernate4分頁(yè)查詢功能實(shí)現(xiàn)
本篇文章主要介紹了springmvc4+hibernate4分頁(yè)查詢功能實(shí)現(xiàn),Springmvc+hibernate成為現(xiàn)在很多人用的框架整合,有興趣的可以了解一下。2017-01-01Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼
這篇文章主要介紹了Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼,需要的朋友可以參考下2020-10-10Java9版本新特性同一個(gè)Jar支持多JDK版本運(yùn)行
這篇文章主要為大家介紹了Java9新版本的特性之同一個(gè)Jar支持多JDK版本運(yùn)行的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03