Singleton妯″紡鐨勫伐浣滃師鐞嗗涓嬶細
- 鐢ㄤ竴涓柟娉曟潵瀹炰緥鍖栨墍闇瀵硅薄銆備負浜嗕繚璇佽鏂規硶鏄敮涓鑳藉疄渚嬪寲姝ょ被鍨嬪璞$殑鏂規硶錛屾垜浠皢榪欎釜綾葷殑鏋勯犲嚱鏁板畾涔変負淇濇姢鐨勬垨鑰呯鏈夌殑銆?/li>
- 璋冪敤榪欎釜鏂規硶鏃訛紝鍏堣媯鏌ュ璞℃槸鍚﹀凡緇忓疄渚嬪寲浜嗐傚鏋滃凡琚疄渚嬪寲錛岄偅涔堣鏂規硶浠呰繑鍥炲璇ュ璞$殑寮曠敤錛涘鏋滃皻鏈疄渚嬪寲錛岃鏂規硶灝嗗疄渚嬪寲瀵硅薄騫惰繑鍥炲姝ゆ柊瀹炰緥鐨勪竴涓紩鐢ㄣ?/li>
鏍規嵁涓婅堪鍘熺悊錛屾垜浠彲浠ュ緱鍒癝ingleton妯″紡鐨勬湰璐ㄥ湪浜庢墍鏈変嬌鐢ㄦ墍闇瀵硅薄鐨勫叾浠栧璞¢兘浣跨敤鍚屼竴涓疄渚嬨係ingleton妯″紡鐨勬剰鍥句嬌鎴戜滑鍙鎵闇瀵硅薄瀹炰緥鍖栦竴嬈★紝鏃犻渶鐢ㄦ埛鍐嶅叧蹇冩墍闇瀵硅薄鏄惁瀛樺湪錛屽嵆璁╂墍闇瀵硅薄鑷繁璐熻矗鍙疄渚嬪寲涓嬈°?br /> 鍗曚緥妯″紡涓鑸唬鐮佸涓嬶細
1 public class Singleton {
2 static private Singleton instance = new Singleton();
3
4 private Singleton(){}
5
6 public static Singleton getInstance(){
7 return instance;
8 }
9 }
褰揅lassLoader鍔犺澆綾誨悗Singleton鐨勫疄渚嬩細鍦ㄧ涓鏃墮棿鍐呭垱寤猴紝鍥犳瀵逛簬寮閿姣旇緝澶х殑鍗曚綋鏇撮氬父鐨勫仛娉曟槸灝嗗疄渚嬪寲鎺ㄨ繜鍒頒嬌鐢ㄥ畠鐨勬椂鍊欙紝鍗蟲儼鎬у姞杞斤紝浠g爜濡備笅錛?br /> 1 public class Singleton {
2 static private Singleton instance = null;
3
4 private Singleton(){}
5
6 public static Singleton getInstance(){
7 if(instance == null) instance =new Singleton();
8 return instance;
9 }
10 }
榪欐槸鍦ㄥ崟綰跨▼涓殑鎯呭喌錛屽鏋滄垜浠殑浠g爜瑕佸湪澶氱嚎紼嬩腑榪愯鍛紵
鍜嬬湅璧鋒潵錛屽彧闇鍚屾鍖栧Singleton瀵硅薄鏄惁宸插垱寤鴻繘琛屾鏌ユ搷浣滃嵆鍙備絾鎬ц兘涓婃潵璇翠笉涓嶅垝綆楋紝鍥犱負鎵鏈夌嚎紼嬮兘蹇呴』絳夊緟鍏充簬瀵硅薄鏄惁瀛樺湪鐨勬鏌ャ傚洜姝ゅ彲鑳芥兂鍒扮殑鏄涓嬭В鍐蟲柟娉曪細
1 if(instance == null) {
2 synchronized(Singleton.class){
3 instance = new Singleton();
4 }
5 }
浣嗕粛鏈夊彲鑳戒袱涓皟鐢ㄩ兘婊¤凍null鐨勬鏌ユ潯浠訛紝鐒跺悗鍐嶅皾璇曞悓姝ュ寲錛屾渶鍚庤繕鏄彲鑳戒細鍒涘緩涓や釜Singleton瀵硅薄銆傝В鍐沖姙娉曟槸鍦ㄥ悓姝ユ鏌ュ悗錛屽啀嬈℃鏌ュ疄渚嬫槸鍚﹀凡鍒涘緩銆?br />1 if(instance == null) {
2 synchronized(Singleton.class){
3 if(instance == null) instance = new Singleton();
4 }
5 }
榪欑鏂規硶琚О涓篋CL(Double-Checked Locking妯″紡)銆備絾鏄垜浠緢蹇彂鐜幫紝榪欑鏂規硶鍦–++涓傜敤錛屼絾瀵笿ava涓嶉傜敤錛屽師鍥犲湪浜嶫ava緙栬瘧鍣ㄦ湰韜殑浼樺寲宸ヤ綔浼氬湪鏋勯犳柟娉曞疄渚嬪寲瀵硅薄涔嬪墠浠庢瀯閫犳柟娉曡繑鍥炴寚鍚戣瀵硅薄鐨勫紩鐢ㄣ傚嵃鍦ㄥ湪Singleton瀵硅薄鐪熸瀹屽叏鏋勯犱箣鍓嶏紝dosyn灝卞彲鑳藉畬鎴愪簡銆傞偅鎬庝箞鍔炲憿錛?br /> 鎴戜滑鍙互鍒╃敤綾昏杞界▼搴忔潵瑙e喅榪欎釜闂銆?br />1 public class Singleton {
2 private static class Instance{
3 static final Singleton instance = new Singleton();
4 public static Singleton getInstance(){
5 return Instance.instance;
6 }
7 }
8 }
榪欎釜鏂規涔嬫墍浠ュ鏁堬紝鏄洜涓哄唴閮ㄧ被錛圛nstance錛夊彧琚杞戒竴嬈★紝鎵浠ュ彧浼氬垱寤轟竴涓猄ingleton瀵硅薄銆?br />
鍙傝冿細
1.銆婅璁℃ā寮忚В鏋愩婼ingleton妯″紡鍜孌CL妯″紡
2.鎺㈢儲璁捐妯″紡涔嬪叚——鍗曚緥妯″紡
]]>