锘??xml version="1.0" encoding="utf-8" standalone="yes"?>精品久久一区二区三区,亚洲欧美日本精品,国模视频一区二区http://www.aygfsteel.com/yqin/category/45343.htmlzh-cnWed, 16 Jun 2010 05:10:12 GMTWed, 16 Jun 2010 05:10:12 GMT60鍗曚緥妯″紡瀹屽叏瑙f瀽http://www.aygfsteel.com/yqin/articles/323628.html鐖辮繍鍔?鐖辯敓媧?/dc:creator>鐖辮繍鍔?鐖辯敓媧?/author>Tue, 15 Jun 2010 09:39:00 GMThttp://www.aygfsteel.com/yqin/articles/323628.htmlhttp://www.aygfsteel.com/yqin/comments/323628.htmlhttp://www.aygfsteel.com/yqin/articles/323628.html#Feedback0http://www.aygfsteel.com/yqin/comments/commentRss/323628.htmlhttp://www.aygfsteel.com/yqin/services/trackbacks/323628.html鏈枃灝嗘帰璁ㄥ崟渚嬫ā寮忕殑鍚勭鎯呭喌錛屽茍緇欏嚭鐩稿簲鐨勫緩璁傚崟渚嬫ā寮忓簲璇ユ槸璁捐妯″紡涓瘮杈冪畝鍗曠殑涓涓紝浣嗘槸鍦ㄥ綰跨▼騫跺彂鐨勭幆澧冧笅浣跨敤鍗存槸涓嶉偅涔堢畝鍗曚簡銆?/span>
棣栧厛鐪嬫渶鍘熷鐨勫崟渚嬫ā寮忋?/span>

 1 package xylz.study.singleton;
 2 
 3 public class Singleton {
 4 
 5     private static Singleton instance = null;
 6 
 7     private Singleton() {
 8     }
 9 
10     public static Singleton getInstance() {
11         if (instance == null) {
12             instance = new Singleton();
13         }
14         return instance;
15     }
16 }
17 


鏄劇劧榪欎釜鍐欐硶鍦ㄥ崟綰跨▼鐜涓嬮潪甯稿ソ錛屼絾鏄綰跨▼浼?xì)瀵艰嚧澶氫釜瀹炰緥鍑虹帋图寴q欎釜澶у閮借兘鐞嗚В銆?/span>
鏈綆鍗曠殑鏀歸犳柟寮忔槸娣誨姞涓涓悓姝ラ攣銆?/span>

 1 package xylz.study.singleton;
 2 
 3 public class SynchronizedSingleton {
 4 
 5     private static SynchronizedSingleton instance = null;
 6 
 7     private SynchronizedSingleton() {
 8     }
 9 
10     public static synchronized SynchronizedSingleton getInstance() {
11         if (instance == null) {
12             instance = new SynchronizedSingleton();
13         }
14         return instance;
15     }
16 }
17 


鏄劇劧涓婇潰鐨勬柟娉曢伩鍏嶄簡騫跺彂鐨勯棶棰橈紝浣嗘槸鐢變簬鎴戜滑鍙槸鍦ㄧ涓嬈℃瀯閫犲璞$殑鏃跺欐墠闇瑕佸悓姝ワ紝浠ュ悗灝變笉鍐嶉渶瑕佸悓姝ワ紝鎵浠ヨ繖閲屼笉鍙伩鍏嶇殑鏈夋ц兘寮閿銆備簬鏄皢閿佸幓鎺夐噰鐢ㄩ潤鎬佺殑灞炴ф潵瑙e喅鍚屾閿佺殑闂銆?/span>

 1 package xylz.study.singleton;
 2 
 3 public class StaticSingleton {
 4 
 5     private static StaticSingleton instance = new StaticSingleton();
 6 
 7     private StaticSingleton() {
 8     }
 9 
10     public static StaticSingleton getInstance() {
11         return instance;
12     }
13 }
14 


涓婇潰鐨勬柟娉曟棦娌℃湁閿佸張瑙e喅浜嗘ц兘闂錛岀湅璧鋒潵宸茬粡婊¤凍闇姹備簡銆備絾鏄拷姹?/span>瀹岀編鐨勭▼搴忓憳鎯沖歡鏃跺姞杞藉璞★紝甯屾湜鍦ㄧ涓嬈¤幏鍙栫殑鏃跺欐墠鏋勯犲璞★紝浜庢槸澶у闈炲父鑱槑鐨勮繘琛屾敼閫狅紝涔熷嵆闈炲父鍑哄悕鐨勫弻閲嶆鏌ラ攣鏈哄埗鍑烘潵浜嗐?/span>

 1 package xylz.study.singleton;
 2 
 3 public class DoubleLockSingleton {
 4 
 5     private static DoubleLockSingleton instance = null;
 6 
 7     private DoubleLockSingleton() {
 8     }
 9 
10     public static DoubleLockSingleton getInstance() {
11         if (instance == null) {
12             synchronized (DoubleLockSingleton.class) {
13                 if (instance == null) {
14                     instance = new DoubleLockSingleton();
15                 }
16             }
17         }
18         return instance;
19     }
20 }
21 


鍙岄噸閿佹満鍒剁湅璧鋒潵闈炲父宸у鐨勯伩鍏嶄簡涓婇潰鐨勯棶棰樸備絾鏄湡鐨勬槸榪欐牱鐨勫悧錛熸枃绔犮?/span>鍙岄噸媯鏌ラ攣瀹氬強(qiáng)鍗曚緥妯″紡銆嬩腑璋堝埌浜嗛潪甯稿婕斿彉鐨勫弻閲嶉攣鏈哄埗甯︽潵鐨勯棶棰橈紝鍖呮嫭姣旇緝闅句互鐞嗚В鐨勬寚浠ら噸鎺掑簭鏈哄埗絳夈傛諱箣灝辨槸鍙岄噸媯鏌ラ攣鏈哄埗浠嶇劧瀵瑰鑷撮敊璇棶棰樿屼笉鏄ц兘闂銆?/span>
浜庢槸緇х畫鏀歸狅紝鏌愪釜鐗涗漢鍒╃敤JVM鐨勭壒鎬ф潵瑙e喅涓婅堪闂錛屽叿浣撳摢涓墰浜烘垜蹇樿浜嗭紝浣嗘槸涓嶆槸涓嬮潰鏂囩珷鐨勪綔鑰呫?/span>
錛?/span>1錛夈?/span>Java theory and practice: Fixing the Java Memory Model, Part 2銆?/span>
錛?/span>2錛夈?/span>Initialize-On-Demand Holder Class and Singletons銆?/span>

 1 package xylz.study.singleton;
 2 
 3 public class HolderSingleton {
 4 
 5     private static class HolderSingletonHolder {
 6 
 7         static HolderSingleton instance = new HolderSingleton();
 8     }
 9 
10     private HolderSingleton() {
11         //maybe throw an Exception when doing something 
12     }
13 
14     public static HolderSingleton getInstance() {
15         return HolderSingletonHolder.instance;
16     }
17 }
18 


涓婅堪浠g爜鐪嬭搗鏉ヨВ鍐充簡涓婇潰鍗曚緥妯″紡閬囧埌鐨勬墍鏈夐棶棰橈紝鑰屼笖瀹為檯涓婂伐浣滅殑寰堝ソ錛屾病鏈変粈涔堥棶棰樸備絾鏄嵈鏈変竴涓嚧鍛界殑闂錛屽鏋滅11琛屾姏鍑轟簡涓涓紓甯革紝涔熷氨鏄涓嬈℃瀯閫犲嚱鏁板け璐ュ皢瀵艱嚧姘歌繙鏃犳硶鍐嶆寰楀埌鏋勫緩瀵硅薄鐨勬満浼?xì)銆?/span>
浣跨敤涓嬮潰鐨勪唬鐮佹祴璇曚笅銆?/span>

 1 package xylz.study.singleton;
 2 
 3 public class HolderSingletonTest {
 4 
 5     private static class HolderSingletonHolder {
 6 
 7         static HolderSingletonTest instance = new HolderSingletonTest();
 8     }
 9 
10     private static boolean init = false;
11     
12     private HolderSingletonTest() {
13         //maybe throw an Exception when doing something 
14         if(!init) {
15             init=true;
16             throw new RuntimeException("fail");
17         }
18     }
19 
20     public static HolderSingletonTest getInstance() {
21         return HolderSingletonHolder.instance;
22     }
23     public static void main(String[] args) {
24         for(int i=0;i<3;i++) {
25             try {
26                 System.out.println(HolderSingletonTest.getInstance());
27             } catch (Exception e) {
28                 System.err.println("one->"+i);
29                 e.printStackTrace();
30             }catch(ExceptionInInitializerError err) {
31                 System.err.println("two->"+i);
32                 err.printStackTrace();
33             }catch(Throwable t) {
34                 System.err.println("three->"+i);
35                 t.printStackTrace();
36             }
37         }
38     }
39 }
40 

寰堜笉騫稿皢寰楀埌浠ヤ笅杈撳嚭錛?/span>

 1 two->0
 2 java.lang.ExceptionInInitializerError
 3     at xylz.study.singleton.HolderSingletonTest.getInstance(HolderSingletonTest.java:21)
 4     at xylz.study.singleton.HolderSingletonTest.main(HolderSingletonTest.java:26)
 5 Caused by: java.lang.RuntimeException: fail
 6     at xylz.study.singleton.HolderSingletonTest.<init>(HolderSingletonTest.java:16)
 7     at xylz.study.singleton.HolderSingletonTest.<init>(HolderSingletonTest.java:12)
 8     at xylz.study.singleton.HolderSingletonTest$HolderSingletonHolder.<clinit>(HolderSingletonTest.java:7)
 9      2 more
10 three->1
11 java.lang.NoClassDefFoundError: Could not initialize class xylz.study.singleton.HolderSingletonTest$HolderSingletonHolder
12     at xylz.study.singleton.HolderSingletonTest.getInstance(HolderSingletonTest.java:21)
13     at xylz.study.singleton.HolderSingletonTest.main(HolderSingletonTest.java:26)
14 three->2
15 java.lang.NoClassDefFoundError: Could not initialize class xylz.study.singleton.HolderSingletonTest$HolderSingletonHolder
16     at xylz.study.singleton.HolderSingletonTest.getInstance(HolderSingletonTest.java:21)
17     at xylz.study.singleton.HolderSingletonTest.main(HolderSingletonTest.java:26)
18 


寰堟樉鐒舵垜浠兂鐫絎竴嬈″姞杞藉け璐ョ浜屾鑳藉鍔犺澆鎴愬姛錛岄潪甯鎬笉騫革紝JVM涓鏃﹀姞杞芥煇涓被澶辮觸灝嗚涓烘綾葷殑瀹氫箟鏈夐棶棰橈紝灝嗘潵涓嶅啀鍔犺澆錛岃繖鏍峰氨瀵艱嚧鎴戜滑娌℃湁鏈轟細(xì)鍐嶅姞杞姐傜洰鍓嶇湅璧鋒潵娌℃湁鍔炴硶閬垮厤姝ら棶棰樸傚鏋滆浣跨敤JVM鐨勭被鍔犺澆鐗規(guī)у氨蹇呴』淇濊瘉綾誨姞杞戒竴瀹氭紜紝鍚﹀垯姝ら棶棰樺皢姣斿茍鍙戝拰鎬ц兘鏇翠弗閲嶃傚鏋滄垜浠殑綾婚渶瑕佸垵濮嬭瘽閭d箞灝遍渶瑕佹兂鍏跺畠鍔炴硶閬垮厤鍦ㄦ瀯閫犲嚱鏁頒腑瀹屾垚銆傜湅璧鋒潵鍍忔槸鍙堝洖鍒頒簡鑰佸湴鏂癸紝闅鵑亾涓嶆槸涔堬紵

鎬諱箣錛岀粨璁烘槸鐩墠娌℃湁涓涓崄鍏ㄥ崄緹庣殑鍗曚緥妯″紡錛岃屽ぇ澶氭暟鎯呭喌涓嬫垜浠彧闇瑕佹弧瓚蟲垜浠殑闇姹傚氨琛岋紝娌″繀鏈夌壒鎰忚拷姹傛渶瀹岀編瑙e喅鏂規(guī)銆?/span>



]]>
主站蜘蛛池模板: 洞口县| 淮安市| 句容市| 武鸣县| 平乡县| 永昌县| 东至县| 蒲江县| 高陵县| 奇台县| 维西| 游戏| 朝阳区| 墨江| 东城区| 宝兴县| 梁平县| 定陶县| 南木林县| 青川县| 磐安县| 武义县| 青神县| 启东市| 黄骅市| 文昌市| 阜宁县| 资中县| 霍林郭勒市| 达日县| 翁源县| 赞皇县| 长垣县| 甘肃省| 永年县| 丹东市| 田林县| 连平县| 高尔夫| 长宁区| 湖口县|