国产一区二区美女诱惑_国产精品免费播放_91精品国产综合久久香蕉麻豆 _久久精品30_久久综合88_国产精品亚洲成人_黑人极品videos精品欧美裸_亚洲色图欧美激情

原創生活

國內 商業 滾動

基金 金融 股票

期貨金融

科技 行業 房產

銀行 公司 消費

生活滾動

保險 海外 觀察

財經 生活 期貨

當前位置:滾動 >

java單例模式并不難 Java設計模式系列演示

文章來源:財金網  發布時間: 2019-04-11 10:00:26  責任編輯:cfenews.com
+|-

【原標題:java單例模式并不難 Java設計模式系列演示】為什么單例

1、在內存中只有一個對象,節省內存空間。避免頻繁的創建銷毀對象,可以提高性能。避免對共享資源的多重占用??梢匀衷L問。

2、確保一個類只有一個實例,自行實例化并向系統提供這個實例

單例需要注意的問題

1、線程安全問題

2、資源使用問題

實際上本文就是在討論這兩個問題

1、餓漢式

package com;public class Singleton {    private static Singleton instance = new Singleton() ;    private Singleton(){    }    public static Singleton getInstance() {         return  instance ;     } }

優點:

在未調用getInstance() 之前,實例就已經創建了,天生線程安全

缺點:

如果一直沒有調用getInstance() , 但是已經創建了實例,造成了資源浪費。

2、懶漢式

package com;public class Person {    private static Person person ;    private Person(){    }    public static Person get(){        if ( person == null ) {            person = new Person() ;        }        return person ;    }}

優點:

get() 方法被調用的時候,才創建實例,節省資源。

缺點:

線程不安全。

這種模式,可以做到單例模式,但是只是在單線程中是單例的,如果在多線程中操作,可能出現多個實例。

測試:啟動20個線程,然后在線程中打印 Person 實例的內存地址

package com;public class A1  {    public static void main(String[] args) {        for ( int i = 0 ;  i < 20 ; i ++ ) {            new Thread( new Runnable() {                @Override                public void run() {                    System.out.println( Person.get().hashCode() );                }            }).start(); ;        }    }}

結果:可以看到出現了兩個 Person 實例,效果圖如下:

創建兩個實例原因分析:

線程A希望使用 Person ,調用 get()方法。因為是第一次調用,A 就發現 person 是 null 的,于是它開始創建實例,就在這個時候,CPU 發生時間片切換,線程B開始執行,它要使用 Person ,調用get()方法,同樣檢測到 person 是null ——注意,這是在 A 檢測完之后切換的,也就是說 A 并沒有來得及創建對象——因此 B 開始創建。B創建完成后,切換到A繼續執行,因為它已經檢測完了,所以A不會再檢測一遍,它會直接創建對象。這樣,線程 A 和 B 各自擁有一個 Person 的對象——單例失敗!

總結:

1、可以實現單線程單例

2、多線單例無法保證

改進:

1、加鎖

3、 用synchronized 加鎖同步

package com;public class Person {    private static Person person ;    private Person(){    }    public synchronized static Person get(){        if ( person == null ) {            person = new Person() ;        }        return person ;    }}

經過測試,已經可以滿足多線程的安全問題了,synchronized 修飾的同步塊可是要比一般的代碼段慢上幾倍的!如果存在很多次 get() 的調用,那性能問題就不得不考慮了!

優點:

1、滿足單線程的單例

2、滿足多線程的單例

缺點:

1、性能差

4、改進性能 雙重校驗

package com;public class Person {    private static Person person ;    private Person(){    }    public synchronized static Person get(){        if ( person == null ) {            synchronized ( Person.class ){                if (person == null) {                    person = new Person();                }            }        }        return person ;    }}

首先判斷 person 是不是為 null ,如果為 null ,加鎖初始化;如果不為 null ,直接返回 person 。整個設計,進行了雙重校驗。

優點:

1、滿足單線程單例

2、滿足多線程單例

3、性能問題得以優化

缺點:

1、第一次加載時反應不快,由于java內存模型一些原因偶爾失敗

5、volatile 關鍵字,解決雙重校驗帶來的弊端

package com;public class Person {    private static volatile Person person = null ;    private Person(){    }    public static Person getInstance(){        if ( person == null ) {            synchronized ( Person.class ){                if ( person == null ) {                    person = new Person() ;                }            }        }        return person ;    }}

假設沒有關鍵字 volatile 的情況下,兩個線程 A、B,都是第一次調用該單例方法,線程A先執行 person = new Person(),該構造方法是一個非原子操作,編譯后生成多條字節碼指令,由于JAVA的指令重排序,可能會先執行 person 的賦值操作,該操作實際只是在內存中開辟一片存儲對象的區域后直接返回內存的引用,之后 person 便不為空了,但是實際的初始化操作卻還沒有執行,如果就在此時線程 B 進入,就會看到一個不為空的但是不完整 (沒有完成初始化)的 Person 對象,所以需要加入 volatile 關鍵字,禁止指令重排序優化,從而安全的實現單例。

補充:看了圖片加載框架 Glide (3.7.0版) 源碼,發現 glide 也是使用 volatile 關鍵字的雙重校驗實現的單例,可見這種方法是值得信賴的。

6、靜態內部類

package com;public class Person {    private Person(){    }    private static class PersonHolder{        /**         * 靜態初始化器,由JVM來保證線程安全         */        private static Person instance = new Person();    }    public static Person getInstance() {        return PersonHolder.instance;    }}

優點:

1、資源利用率高,不執行getInstance()不被實例,可以執行該類其他靜態方法

7、枚舉類實現單例

package com;public enum Singleton {    INSTANCE ;    public void show(){        // Do you need to do things    }}

使用

獲取實例對象:Singleton.INSTANCE調用其他方法:Singleton.INSTANCE.show();

總結:

1、上面的7中方法,都實現了某種程度的單例,各有利弊,根據使用的場景不同,需要滿足的特性不同,選取合適的單例方法才是正道。

2、對線程要求嚴格,對資源要求不嚴格的推薦使用:1 餓漢式

3、對線程要求不嚴格,對資源要求嚴格的推薦使用:2 懶漢式

4、對線程要求稍微嚴格,對資源要求嚴格的推薦使用:4 雙重加鎖

5、同時對線程、資源要求非常嚴格的推薦使用:5 、 6

專題首頁|財金網首頁

原創
新聞

精彩
互動

獨家
觀察

京ICP備2021034106號-38   營業執照公示信息  財金網  版權所有  cfenews.com  投稿郵箱:362293157@qq.com  業務QQ:362293157立即發帖
在线日本视频| 日韩一区二区精品| 欧美亚洲禁片免费| 亚洲免费一在线| 国产在线一二| 亚州一区二区三区| 国内精品久久久久久久影视简单| 悠悠资源网久久精品| 国产一区二区福利| 亚洲视频图片小说| 欧美一级xxx| 色视频在线观看免费| 在线视频cao| 欧美日韩国产传媒| 国产一区二区h| 亚洲亚洲人成综合网络| 亚洲精品久久久久久久久久久久久| 天堂在线免费av| 欧美日韩在线精品一区二区三区激情综合 | 视频一区日韩| 亚洲激情精品| 国产精品免费aⅴ片在线观看| 91成人在线精品| 性网站在线免费观看| 大菠萝精品导航| 99久久亚洲精品蜜臀| 成人97人人超碰人人99| 欧美性做爰猛烈叫床潮| 夜色资源站国产www在线视频| gogo亚洲高清大胆美女人体| 欧美区日韩区| 国产女主播在线一区二区| 欧美老女人第四色| h网站在线免费观看| 96sao在线精品免费视频| 久热re这里精品视频在线6| 综合久久给合久久狠狠狠97色| 亚洲国产欧美久久| 国产在线88av| 欧美另类女人| 亚洲日本在线a| 看黄的a网站| 亚洲天堂1区| 国产亚洲在线| 午夜激情一区二区三区| 头脑特工队2在线播放| 2020最新国产精品| 精品一区二区精品| 欧美日韩第一区日日骚| 少妇av在线| 欧美日韩国产一区精品一区| 日本一区二区久久| 国产视频一二| 亚洲乱码一区| av在线一区二区三区| 亚洲国产精品福利| 欧美天堂在线| 韩国精品在线观看| 日韩一级精品视频在线观看| 黄色在线网站噜噜噜| 国产精品综合| 欧美性一二三区| 成年人视频免费在线播放| 在线观看亚洲| 色婷婷激情综合| 欧美aaaaaaa| 欧美综合二区| 欧美区在线观看| 国模套图日韩精品一区二区| 蜜臀久久99精品久久久画质超高清 | 成人高清免费观看| 亚洲欧美在线一区| 国产精品色在线网站| 91亚洲精华国产精华精华液| www.大网伊人| 欧美人与牛zoz0性行为| 国产三级精品在线| 日韩欧美在线观看一区二区| 日韩国产一区二区| 亚洲成人自拍一区| 97天天综合网| 日日噜噜夜夜狠狠视频欧美人| 欧美二区三区91| 78精品国产综合久久香蕉| 国产成人精品三级麻豆| 亚洲精品福利视频| 任你躁在线精品免费| 亚洲欧美日韩国产综合| 国产午夜精品久久久久免费视| 午夜在线一区二区| 精品福利二区三区| 亚洲激情77| 午夜精品福利久久久| 国产白浆在线免费观看| 国产乱码精品一品二品| 免费黄视频网站| 无需播放器亚洲| 欧美日本一区二区三区| 精品国产亚洲一区二区在线观看 | 18涩涩午夜精品.www| 久久久久久久久免费视频| 爽爽淫人综合网网站| 日韩大片免费观看视频播放| 亚洲最大在线| 欧美日韩国产精品一区| 69堂精品视频在线播放| 国产精品美女视频| 日本性爱视频在线观看| 国产成人av影院| 国产视频在线看| 免费观看日韩av| 91在线九色porny| 亚洲毛片视频| 国产精品久久久久久精| 狠狠久久婷婷| 亚洲久久久久久久久久| 亚洲欧美网站在线观看| 亚洲第一精品夜夜躁人人躁| 精品在线99| 在线综合视频播放| 欧美色网址大全| 日韩欧美一二三| 欧美oldwomenvideos| 精品va天堂亚洲国产| 欧美黄色大片在线观看| 欧美精品一区二区久久婷婷| 亚洲国产精品综合久久久 | av最新地址| 国产亚洲毛片| 深夜视频在线免费| 国产毛片精品视频| 欧美高清视频| 337p粉嫩大胆色噜噜噜噜亚洲| 污污的视频在线观看| 久久精品视频网| 久久久久久久| 婷婷夜色潮精品综合在线| 粉嫩精品导航导航| 欧美二区乱c少妇| 亚洲综合色网| 在线小视频网址| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 7777精品久久久大香线蕉| 成人在线免费观看91| 亚洲精品午夜精品| 日本中文字幕一区二区视频| yw193.com尤物在线| 国产欧美一区二区三区鸳鸯浴| 国产私拍福利精品视频二区| 色婷婷精品久久二区二区蜜臂av| 日韩黄色大片网站| 美日韩在线观看| 国产精品一二二区| 一本大道色婷婷在线| 欧美日韩亚洲天堂| 国产精品国产三级国产在线观看| 国产主播福利| 国产盗摄一区二区三区| 日本蜜桃在线观看视频| 精品久久久久国产| 亚洲国产精品91| 每日更新av在线播放| 国产婷婷色一区二区三区在线| 国产不卡精品| 亚洲白拍色综合图区| 日本大胆欧美人术艺术动态| 国产乱码在线| 欧美性少妇18aaaa视频| 欧美激情日韩| 一区二区高清不卡| 亚洲福利一区二区| 欧美激情aⅴ一区二区三区| 美丽的姑娘在线观看免费动漫| 国产精品网站在线观看| 亚洲综合图色| 天堂av网在线| 夜夜揉揉日日人人青青一国产精品| 国产精品密蕾丝视频下载| 亚洲校园欧美国产另类| 亚洲三级在线免费观看| 99re66热这里只有精品8| www.久久热.com| 午夜精品成人在线| 一本久道综合久久精品| 国产经典三级在线| 在线观看免费成人| 日本女人一区二区三区| 日韩精品99| 日韩电影中文字幕一区| 91免费在线视频观看| 欧美电影在线观看完整版| 精东传媒在线观看| 亚洲免费观看高清完整版在线观看熊| 久久伦理在线| a在线免费观看| 欧美午夜不卡在线观看免费| 国产毛片精品国产一区二区三区| 国产精品99久久免费观看| 三级av在线播放| 色999日韩国产欧美一区二区|