麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

單例模式貫通

2019-11-10 20:29:01
字體:
來源:轉載
供稿:網友

單例設計模式:

單例概念: java中單例設計模式是一種常見的設計模式,單例設計模式的寫法有好多種: 懶漢式單例餓漢式單例枚舉單例(這種寫法比較少見,但是值得討論和使用)單例設計模式具備的特點: 單例類只能有一個實例單例類必須自己創建自己的唯一實例單例類必須給所有其他對象提供這一實例

懶漢式單例:

注意點: 類內部私有封裝一個自己的引用構造器私有化提供獲取該類內部私有封裝的唯一方法

缺點:

懶漢式單例設計的實現沒有考慮過線程安全問題,它是非線程安全的,在并發環境下,很可能會出現多個SingleTon實例。

實例:

非線程安全:

public class Person { //類內部封裝自己的引用,該引用必須私有 PRivate static Person person = null; //構造器私有化 private Person(){ } //提供獲取單例的唯一接口 public static Person getInstance() { if(person == null) { person = new Person(); } return person; }}

改造:

在獲取方法中,加入同步機制:

synchronized修飾獲取方法:

缺陷:

雖然線程安全了,但是每次都要進行同步,因此會影響性能

//提供獲取單例的唯一接口public synchronized static Person getInstance() { if(person == null) { person =new Person(); } return person;}

雙重檢查機制:

改善:

做了兩次判空操作,確保了只有第一次調用單例的時候才會做同步,也避免了同步的性能損耗

//提供獲取單例的唯一接口public static Person getInstance() { if(person ==null) { synchronized (Person.class) { if(person == null) { person =new Person(); } } } return person;}

使用靜態內部類并且加上final修飾的機制:

改善:

利用ClassLoader的機制類保證初始化單例對象的時候,只有一個線程,所以也是線程安全的,同時還沒有性能的損耗。

public class Person{ //構造器私有化 private Person() { } //寫一個靜態內部類,用來提供單例對象 private static class LazyHolder { public static final Person SINGLEINSTANCE = new Person(); } //獲取單例對象的方法 public static Person getInstance(){ return LazyHolder.SINGLEINSTANCE; }}

餓漢式單例:

因為餓漢式單例是在類創建的同時,就已經創建好了一個靜態的對象供給系統使用,以后不再改變,所以是天生線程安全的

實例:

public class Person { //類內部封裝自己的引用,該引用必須私有 private static Person person = new Person(); //構造器私有化 private Person(){ } //提供獲取單例的唯一接口 public static Person getInstance() { return person; }}

餓漢式和懶漢式的區別:

從名字上區分: 餓漢: 類一旦加載,就把單例初始化完成,保證取單例的時候,單例是絕對存在的懶漢: 比較懶,只有當取單例的時候,才會去初始化這個單例對象線程安全: 餓漢式: 天生線程安全,可以直接不用擔心多線程的安全問題懶漢式: 本身是非線程安全的,為了實現線程安全,需要額外做操作。

枚舉單例:

前面介紹了懶漢式單例、餓漢式單例,最近在網上看到有大神提出可以使用枚舉類型創建單例。優點: 我們知道,上述的這些不管是懶漢式、餓漢式,都逃不開一個問題:反射機制能夠進行攻擊,這樣單例就失效了。因此如果想要對單例進行保護,就要使用枚舉單例了。枚舉類型天生就是線程安全的,也不需要去考慮線程安全問題。所以,看來看去還是枚舉單例用起來比較高大上。

且看下面代碼實例:

public enum Person {INSTANCE;Person() { //單例構造,默認私有}@Overridepublic String toString() { return super.toString();}}class test{public void go(){ //直接使用枚舉類型調用單例 Person.INSTANCE.toString();}}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一区二区三区日韩在线观看 | 日本成人高清视频 | 麻豆一区二区99久久久久 | 九九视屏| 成人视屏在线 | 黄片毛片一级 | 日本精品久久久久久草草 | 日本在线视频一区二区三区 | 精品一区视频 | 久久久久久久久久久久网站 | 国产一级毛片网站 | 国产精品99久久久久久久女警 | 日韩午夜一区二区三区 | 成人免费av在线播放 | www成人在线观看 | 亚洲片在线观看 | 成人毛片免费 | 国产成人羞羞视频在线 | 久久欧美亚洲另类专区91大神 | 欧日韩在线视频 | 国产亚洲精品网站 | 午夜激情视频网站 | 19禁国产精品福利视频 | 九九热免费视频在线观看 | 国产在线一区二区三区 | 黄色特级毛片 | 日韩精品中文字幕一区二区三区 | 欧美精品一区二区久久 | 亚洲午夜精选 | 亚洲精品午夜国产va久久成人 | 国产亚洲综合精品 | www.xxx视频| 92看片淫黄大片欧美看国产片 | 亚洲成人久久精品 | 亚洲最新无码中文字幕久久 | 久久久久亚洲视频 | 草莓视频久久 | jizzjizzjizz少妇 | 国产成人综合在线视频 | 国产精品av久久久久久久久久 | 一级黄色性感片 |