亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

review引發的有關于單例模式的思考

2019-11-26 16:12:48
字體:
來源:轉載
供稿:網友

一次代碼調試中發現一個情況,即我在查看memcached的connection時,發現總是維持在100來個左右,當然這看似沒什么問題,因為memcached默認connection有1024個。但是我想的是為什么會有100來個,因為我的memcachedclient的產生采用的是單例模式我定義了一個memcachedClientFactory類,主要代碼如下:

復制代碼 代碼如下:

MemcachedClientFactory{
private MemcachedConnectionBuilder memcachedConnectionBuilder;
private String servers;
private static MemcachedClient memcachedClient;

private MemcachedClientFactory(){
}

private MemcachedClientFactory(MemcachedConnectionBuilder memcachedConnectionBuilder, String servers){
 this. memcachedConnectionBuilder= memcachedConnectionBuilder;
 this.servers=servers;
 }

public static MemcachedClient createClient(){
if(memcachedClient==null){
this.memcahcedClien= new MemcachedClient(memcachedConnectionBuilder.build(),AddrUtil.get(servers));
}
 return this.memcahcedClient;
}
}
}

回到最初的問題,為什么會有100多個連接?

上面這個寫法真的能保證只產生一個連接?很顯然是不能,為什么?多線程并發!問題就出在這里,當有多個線程同時進入createClient()方法時,而且剛好都判斷為memcachedClient為null,這時候就產生了多個連接。哈,問題找到了。

改進:

復制代碼 代碼如下:

public static synchronizd MemcachedClient createClient(){
 if(memcachedClient==null){
this.memcahcedClien=  new
MemcachedClient(memcachedConnectionBuilder.build(),AddrUtil.get(servers));
}
 return this.memcahcedClient;
}

這樣就ok了,改動很簡單。程序是沒有問題了,而且也能保證只有一個連接。

不過拋開這個問題,我們可以繼續就如何解決單例模式下的并發問題深入思考一下。

我總結一下,要解決單例模式在并發下的問題,大概有三種方式:

1. 不使用延遲實例化,而是用提前實例化。

即程序改寫為:

復制代碼 代碼如下:

Public Class Singleton{
private static Singleton instance=new Singleton();
private Singleton(){};

public static Singleton getInstance(){
   return instance;
}
}

這樣做時,jvm在加載類時就立馬創建了該實例,所以這樣做的前提是,創建該實例的負擔不大,我不比過多的考慮性能,并且我們確認該實例是一定會用到的。其實我前面的代碼也完全可以使用這個方式:

復制代碼 代碼如下:

MemcachedClientFactory{
private MemcachedConnectionBuilder memcachedConnectionBuilder;
private String servers;
private static MemcachedClient memcachedClien= new
MemcachedClient(memcachedConnectionBuilder.build(),AddrUtil.get(servers));

private MemcachedClientFactory(){
}

private MemcachedClientFactory(MemcachedConnectionBuilder memcachedConnectionBuilder, String servers){
 this. memcachedConnectionBuilder= memcachedConnectionBuilder;
 this.servers=servers;
 }

public static MemcachedClient createClient(){
 return this.memcahcedClient;
}
}
}

不過,看上去似乎沒有問題,但是有隱患,即一旦有人不小心調用了memcachedClient.shutdown()方法,那整個程序就無法再生出新的memcachedClient了。當然這是極端情況了,但是為了代碼的健壯,可以再改為:

復制代碼 代碼如下:

public static MemcachedClient createClient(){
if(memcachedClient==null){
this.memcahcedClien= new MemcachedClient(memcachedConnectionBuilder.build(),AddrUtil.get(servers));
}
return this.memcahcedClient;
}

2.  就是使用synchronized關鍵字。

這么做可以保證同步問題,但是我們知道使用synchronized的開銷是很大的,會嚴重影響性能,所以用這個的前提是,你確認不會經常調用這個方法,或者你創建這個instance的開銷不會特別大。是否還可以改進,看 下面。

3. 使用“雙重檢查加鎖“,在getInstance中見識使用同步

復制代碼 代碼如下:

public Class Singleton{
private volatile static Singleton instance;

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

}
return instance;
}
}

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av综合中文字幕| 在线播放日韩精品| 久久影视电视剧凤归四时歌| 日本欧美一级片| 亚洲精品成人久久| 国产视频精品va久久久久久| 日韩国产高清污视频在线观看| 91在线网站视频| 国产精品极品尤物在线观看| 色综合伊人色综合网| 亚洲欧美中文字幕在线一区| 亚洲无线码在线一区观看| 亚洲午夜av电影| 一本色道久久88综合亚洲精品ⅰ| 欧美一乱一性一交一视频| 成人中心免费视频| 久久91精品国产91久久久| 欧美一区二区三区……| 国产精品白嫩美女在线观看| 亚洲欧洲在线播放| 成人国产精品一区| 精品国偷自产在线视频| 日本成人黄色片| 日韩中文在线观看| 久久网福利资源网站| 不卡中文字幕av| 欧美在线一区二区视频| 国产91久久婷婷一区二区| 成人黄色短视频在线观看| 成人福利免费观看| 亚洲日本中文字幕免费在线不卡| 九九视频这里只有精品| 久热精品视频在线观看一区| 国产精品男人的天堂| 亚洲精品乱码久久久久久金桔影视| 亚洲白拍色综合图区| 亚洲福利在线观看| 欧美—级a级欧美特级ar全黄| 久久在线精品视频| 国产美女久久精品| www.欧美精品一二三区| 亚洲精品美女久久| 91免费精品视频| 国产精品入口免费视频一| 蜜月aⅴ免费一区二区三区| 欧美理论在线观看| 色综合久久中文字幕综合网小说| 欧美日韩美女在线| www.亚洲天堂| 7777精品久久久久久| 97超碰蝌蚪网人人做人人爽| 国产成人一区二区三区| 亚洲色图13p| 黑人极品videos精品欧美裸| 91视频国产一区| 97免费视频在线播放| 亚洲乱码av中文一区二区| 色综合亚洲精品激情狠狠| 日韩高清有码在线| 91a在线视频| 91av视频在线观看| 亚洲在线观看视频网站| 色吧影院999| 久久精品亚洲一区| 国产精品麻豆va在线播放| 91欧美精品午夜性色福利在线| 亚洲视频专区在线| 色偷偷噜噜噜亚洲男人| 国产丝袜高跟一区| 成年无码av片在线| 久久久精品视频在线观看| 欧美精品久久久久久久久| 欧美高跟鞋交xxxxxhd| 欧美国产日本高清在线| 国产日韩精品入口| 亚洲人成电影网站色…| 亚洲国产小视频| 欧美一级bbbbb性bbbb喷潮片| 成人黄色网免费| 亚洲精品视频播放| 91精品国产免费久久久久久| 亚洲欧美中文字幕| 欧美裸体xxxx极品少妇软件| 国产精品视频最多的网站| 91性高湖久久久久久久久_久久99| 欧美又大粗又爽又黄大片视频| 亚洲综合精品伊人久久| 国产不卡av在线免费观看| 96国产粉嫩美女| 美女福利视频一区| 国产日韩av在线| 国产美女被下药99| 国产欧美精品久久久| 国产激情综合五月久久| 国产一区二区美女视频| 亚洲第一av网| 久久精品亚洲热| 成人福利免费观看| 欧美xxxwww| 中文字幕亚洲综合久久| 亚洲大尺度美女在线| 国产精品日韩在线播放| 久热精品视频在线免费观看| 最新国产精品亚洲| 亚洲无亚洲人成网站77777| 国产欧美韩国高清| 亚洲国产美女精品久久久久∴| 免费97视频在线精品国自产拍| 色偷偷88888欧美精品久久久| 国产成人jvid在线播放| 亚洲在线视频观看| 国产一区二区三区在线| 97视频在线观看免费高清完整版在线观看| 国产精品久久久久9999| 尤物精品国产第一福利三区| 国产精品扒开腿做爽爽爽视频| 欧美香蕉大胸在线视频观看| 国产精品www色诱视频| 亚洲高清久久网| 日韩福利在线播放| 亚洲第一精品夜夜躁人人躁| 中文字幕综合在线| 性夜试看影院91社区| 精品无人区乱码1区2区3区在线| 色七七影院综合| 欧美成人午夜激情在线| 精品久久久视频| www.久久久久| 日韩美女免费视频| 日韩av免费一区| 国产精品www网站| 久久久成人的性感天堂| 国产一区二区免费| 欧美精品一本久久男人的天堂| 伊人久久大香线蕉av一区二区| 狠狠躁天天躁日日躁欧美| 亚洲香蕉在线观看| 亚洲电影在线观看| 国产91精品黑色丝袜高跟鞋| 一本色道久久88精品综合| 亚洲欧美国内爽妇网| 精品亚洲一区二区三区在线播放| 伊人久久大香线蕉av一区二区| 亚洲国产99精品国自产| 在线观看精品国产视频| 精品国内亚洲在观看18黄| 欧美激情三级免费| 91天堂在线视频| xvideos成人免费中文版| 69国产精品成人在线播放| 国产精品av网站| 韩国精品久久久999| 亚洲国产成人久久综合一区| 欧美性猛交xxxx乱大交蜜桃| 美女黄色丝袜一区| 日韩欧美在线免费观看| 欧美性猛交xxxx乱大交极品| 日韩精品中文字| 国产精品国产三级国产aⅴ浪潮| 亚洲乱亚洲乱妇无码| 国产xxx69麻豆国语对白| 亚洲欧洲国产伦综合| 国产成人高潮免费观看精品| 日韩高清电影免费观看完整|