锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 涓撴敞浜庡垎浜獼ava鍚庣鐩稿叧鎶鏈佽佸徃鏈哄疄鎴樺共璐э紝涓嶉檺浜嶫VM銆佸茍鍙戙佽璁℃ā寮忋佹ц兘浼樺寲銆佸垎甯冨紡&寰湇鍔°佷簯鍘熺敓銆佸ぇ鏁版嵁鐩稿叧涓婚銆?/span>
Java鐖卞ソ鑰呯ぞ鍖?/strong>
鍏紬鍙峰唴瀹圭畝浠嬶細
甯屾湜鍏蟲敞鐨勪綘鍋滀笅鑴氭錛屽畾鏈夋墍鏀惰幏銆?/span>
浠ュ墠鐨勪釜浜哄崥瀹㈠唴瀹逛笉濂借縼縐伙紝鎵浠ユ垜鎵撶畻鏍規嵁鑷繁鐨勫騫寸粡楠岋紝涓嶆柇鏁寸悊杈撳嚭鏈変環鍊肩殑鍐呭銆?br />鐩墠鍏紬鍙峰唴瀹規湁鍏充簬SpringCloud錛堝井鏈嶅姟妗嗘灦錛夈丼kywalking錛圓PM鐩戞帶璋冪敤閾撅級銆丣VM錛圙C鍒嗘瀽銆佸唴瀛樻硠婕忓垎鏋愶級銆佸茍鍙戠紪紼?/span>鐩稿叧鍘熷垱瀹炴垬鏂囩珷宸插嚭鐐夈?br />
鏈榪戝垰寮濮嬪凡緇忔湁涓嶅皯灝忎紮浼村叧娉ㄤ簡錛屾湡寰呰兘鏈夊垢鎼滅儲鍒版湰鍗氬鐨勫悓瀛︼紝鍙互鎵爜鍏蟲敞涓涓嬶紝涓嶈儨鎰熸縺銆?br />澶у鏈変換浣曟妧鏈佽亴鍦恒侀潰璇曚笂鐨勯棶棰橀兘鍙互涓庢垜浜ゆ祦銆?br />
鏂瑰紡涓錛?/strong>鎵爜浠ヤ笅鍏紬鍙蜂簩緇寸爜錛?/strong>
鏂瑰紡浜岋細鍦ㄥ井淇′笂鐩存帴鎼滅儲錛?nbsp;javatech_cbo
鎰熻阿鍚勪綅灝忎紮浼寸殑鏀寔錛屽悗緇細鍦ㄨ鍏紬鍙蜂笂杈撳嚭澶ч噺鐨勬湁浠峰肩殑瀹炴垬騫茶揣 錛屾湡寰呬笌浣犱竴鍚岃繘姝ヤ笌鎴愰暱銆?br />
]]>
]]>
]]>
瀵逛簬Frame鑰岃█錛孭laylist鏄竴涓鍣紝鐒惰孭laylist涔熷疄浣淧layable錛屾墍浠ュ畠涔熷彲浠ユ挱鏀撅紝鎮ㄥ彲浠ヨ繘涓姝ュ湴灝哖laylist緇勫悎鑷沖彟涓涓狿laylist涓紝浠ュ艦鎴愭洿闀跨殑鎾斁娓呭崟銆備互Java瀹炵幇鐨勮瘽銆?br />浠ava瀵︾従鐨勮┍銆?br />import java.util.*;
interface Playable {
void play();
}
class Frame implements Playable {
private String image;
Frame(String image) {
this.image = image;
}
public void play() {
System.out.println("鎾斁 " + image);
}
}
class Playlist implements Playable {
private List<Playable> list = new ArrayList<Playable>();
public void add(Playable playable) {
list.add(playable);
}
public void play() {
for(Playable playable : list) {
playable.play();
}
}
}
public class Main {
public static void main(String[] args) {
Frame logo = new Frame("鐗囬牠 LOGO");
Playlist playlist1 = new Playlist();
playlist1.add(new Frame("Duke 宸︽彯鎵?));
playlist1.add(new Frame("Duke 鍙蟲彯鎵?));
Playlist playlist2 = new Playlist();
playlist2.add(new Frame("Duke 璧板乏鑵?));
playlist2.add(new Frame("Duke 璧板彸鑵?));
Playlist all = new Playlist();
all.add(logo);
all.add(playlist1);
all.add(playlist2);
all.play();
}
}
浠ython瀵︾従鐨勮┍錛?br />class Frame:
all.play();浠ML鏉ヨ〃紺篊omposite妯″紡鐨勭粨鏋勶細
def __init__(self, image):
self.image = image
def play(self):
print("鎾斁 " + self.image)
class Playlist:
def __init__(self):
self.list = []
def add(self, playable):
self.list.append(playable);
def play(self):
for playable in self.list:
playable.play()
logo = Frame("鐗囬牠 LOGO")
playlist1 = Playlist()
playlist1.add(Frame("Duke 宸︽彯鎵?))
playlist1.add(Frame("Duke 鍙蟲彯鎵?))
playlist2 = Playlist()
playlist2.add(Frame("Duke 璧板乏鑵?))
playlist2.add(Frame("Duke 璧板彸鑵?))
all = Playlist()
all.add(logo)
all.add(playlist1)
all.add(playlist2)
鍏鋒湁灞傛鎬ф垨緇勫悎鎬х殑鐗╀歡鍙互浣跨敤Composite妯″紡錛屽儚鏄數璺厓浠躲佽紿楀厓浠剁瓑錛屼嬌鐢–omposite妯″紡鍙互澶уぇ鍑忎綆榪欎簺鍏冧歡璁捐鐨勫鏉傚害錛屼互Java鏍囧噯API涓瑼WT瑙嗙獥鍏冧歡涓轟緥錛?/small>Component涓婃湁涓猵aint()鏂規硶錛屽彲浠ヨ繘琛屽厓浠剁殑緇樺埗錛?/small>Container鍙互瀹圭撼Component錛堝Button銆丩abel絳夛級錛岃孋ontainer緇ф壙Component錛屾墍浠ontainer涔熷彲浠ュ綰矯ontainer錛岃繖涔熸槸Composite妯″紡鐨勫疄闄呬緥瀛愶細
from 錛?nbsp;http://caterpillar.onlyfun.net/Gossip/index.html
]]>
鍦ㄥ紑鍙戜腑錛屽鏋滄煇涓疄渚嬬殑鍒涘緩闇瑕佹秷鑰楀緢澶氱郴緇熻祫婧愶紝閭d箞鎴戜滑閫氬父浼氫嬌鐢ㄦ儼鎬у姞杞芥満鍒訛紝涔熷氨鏄鍙湁褰撲嬌鐢ㄥ埌榪欎釜瀹炰緥鐨勬椂鍊欐墠浼氬垱寤鴻繖涓疄渚嬶紝榪欎釜濂藉鍦ㄥ崟渚嬫ā寮忎腑寰楀埌浜嗗箍娉涘簲鐢ㄣ傝繖涓満鍒跺湪single-threaded鐜涓嬬殑瀹炵幇闈炲父綆鍗曪紝鐒惰屽湪multi-threaded鐜涓嬪嵈瀛樺湪闅愭偅銆傛湰鏂囬噸鐐逛粙緇嶆儼鎬у姞杞芥満鍒朵互鍙婂叾鍦ㄥ綰跨▼鐜涓嬬殑浣跨敤鏂規硶銆傦紙浣滆卬umberzero錛屽弬鑰僆BM鏂囩珷銆奃ouble-checked locking and the Singleton pattern銆嬶紝嬈㈣繋杞澆涓庤璁猴級
1 鍗曚緥妯″紡鐨勬儼鎬у姞杞?br /> 閫氬父褰撴垜浠璁′竴涓崟渚嬬被鐨勬椂鍊欙紝浼氬湪綾葷殑鍐呴儴鏋勯犺繖涓被錛堥氳繃鏋勯犲嚱鏁幫紝鎴栬呭湪瀹氫箟澶勭洿鎺ュ垱寤猴級錛屽茍瀵瑰鎻愪緵涓涓猻tatic getInstance鏂規硶鎻愪緵鑾峰彇璇ュ崟渚嬪璞$殑閫斿緞銆備緥濡傦細
Java浠g爜 < type="application/x-shockwave-flash" width="14" height="15" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=public%20class%20Singleton%20%20%20%20%20%20%0A%7B%20%20%20%20%20%20%0A%20%20%20%20private%20static%20Singleton%20instance%20%3D%20new%20Singleton()%3B%20%20%20%20%20%20%0A%20%20%20%20private%20Singleton()%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%E2%80%A6%20%20%20%20%20%20%0A%20%20%20%20%7D%20%20%20%20%20%20%0A%20%20%20%20public%20static%20Singleton%20getInstance()%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20instance%3B%20%20%20%20%20%20%20%0A%20%20%20%20%7D%20%20%20%20%20%20%0A%7D%20%20%20%20%20%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14">
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton(){
…
}
public static Singleton getInstance(){
return instance;
}
}
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton(){
…
}
public static Singleton getInstance(){
return instance;
}
}
榪欐牱鐨勪唬鐮佺己鐐規槸錛氱涓嬈″姞杞界被鐨勬椂鍊欎細榪炲甫鐫鍒涘緩Singleton瀹炰緥錛岃繖鏍風殑緇撴灉涓庢垜浠墍鏈熸湜鐨勪笉鍚岋紝鍥犱負鍒涘緩瀹炰緥鐨勬椂鍊欏彲鑳藉茍涓嶆槸鎴戜滑闇瑕佽繖涓疄渚嬬殑鏃跺欍傚悓鏃跺鏋滆繖涓猄ingleton瀹炰緥鐨勫垱寤洪潪甯告秷鑰楃郴緇熻祫婧愶紝鑰屽簲鐢ㄥ緇堥兘娌℃湁浣跨敤Singleton瀹炰緥錛岄偅涔堝垱寤篠ingleton娑堣楃殑緋葷粺璧勬簮灝辮鐧界櫧嫻垂浜嗐?/p>
涓轟簡閬垮厤榪欑鎯呭喌錛屾垜浠氬父浣跨敤鎯版у姞杞界殑鏈哄埗錛屼篃灝辨槸鍦ㄤ嬌鐢ㄧ殑鏃跺欐墠鍘誨垱寤恒備互涓婁唬鐮佺殑鎯版у姞杞戒唬鐮佸涓嬶細
Java浠g爜 < type="application/x-shockwave-flash" width="14" height="15" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=public%20class%20Singleton%7B%20%20%20%20%20%20%0A%20%20%20%20private%20static%20Singleton%20instance%20%3D%20null%3B%20%20%20%20%20%20%0A%20%20%20%20private%20Singleton()%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%E2%80%A6%20%20%20%20%20%20%0A%20%20%20%20%7D%20%20%20%20%20%20%0A%20%20%20%20public%20static%20Singleton%20getInstance()%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20(instance%20%3D%3D%20null)%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20instance%20%3D%20new%20Singleton()%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20instance%3B%20%20%20%20%20%20%20%0A%20%20%20%20%7D%20%20%20%20%20%20%0A%7D%20%20%20%20%20%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14">
public class Singleton{
private static Singleton instance = null ;
private Singleton(){
…
}
public static Singleton getInstance(){
if (instance == null )
instance = new Singleton();
return instance;
}
}
public class Singleton{
private static Singleton instance = null;
private Singleton(){
…
}
public static Singleton getInstance(){
if (instance == null)
instance = new Singleton();
return instance;
}
}
榪欐牱錛屽綋鎴戜滑絎竴嬈¤皟鐢⊿ingleton.getInstance()鐨勬椂鍊欙紝榪欎釜鍗曚緥鎵嶈鍒涘緩錛岃屼互鍚庡啀嬈¤皟鐢ㄧ殑鏃跺欎粎浠呰繑鍥炶繖涓崟渚嬪氨鍙互浜嗐?/p>
2 鎯版у姞杞藉湪澶氱嚎紼嬩腑鐨勯棶棰?br /> 鍏堝皢鎯版у姞杞界殑浠g爜鎻愬彇鍑烘潵錛?nbsp;
Java浠g爜 < type="application/x-shockwave-flash" width="14" height="15" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=public%20static%20Singleton%20getInstance()%7B%20%20%20%20%20%20%0A%20%20%20%20if%20(instance%20%3D%3D%20null)%20%20%20%20%20%20%0A%20%20%20%20instance%20%3D%20new%20Singleton()%3B%20%20%20%20%20%20%20%0A%20%20%20%20return%20instance%3B%20%20%20%20%20%20%20%0A%7D%20%20%20%20" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14">
public static Singleton getInstance(){
if (instance == null )
instance = new Singleton();
return instance;
}
public static Singleton getInstance(){
if (instance == null)
instance = new Singleton();
return instance;
} 榪欐槸濡傛灉涓や釜綰跨▼A鍜孊鍚屾椂鎵ц浜嗚鏂規硶錛岀劧鍚庝互濡備笅鏂瑰紡鎵ц錛?/p>
1. A榪涘叆if鍒ゆ柇錛屾鏃秄oo涓簄ull錛屽洜姝よ繘鍏f鍐?/p>
2. B榪涘叆if鍒ゆ柇錛屾鏃禔榪樻病鏈夊垱寤篺oo錛屽洜姝oo涔熶負null錛屽洜姝涔熻繘鍏f鍐?/p>
3. A鍒涘緩浜嗕竴涓狥oo騫惰繑鍥?/p>
4. B涔熷垱寤轟簡涓涓狥oo騫惰繑鍥?/p>
姝ゆ椂闂鍑虹幇浜嗭紝鎴戜滑鐨勫崟渚嬭鍒涘緩浜嗕袱嬈★紝鑰岃繖騫朵笉鏄垜浠墍鏈熸湜鐨勩?/p>
3 鍚勭瑙e喅鏂規鍙婂叾瀛樺湪鐨勯棶棰?br /> 3.1 浣跨敤Class閿佹満鍒?br /> 浠ヤ笂闂鏈鐩磋鐨勮В鍐沖姙娉曞氨鏄粰getInstance鏂規硶鍔犱笂涓涓猻ynchronize鍓嶇紑錛岃繖鏍鋒瘡嬈″彧鍏佽涓涓幇鎴愯皟鐢╣etInstance鏂規硶錛?/p>
Java浠g爜 < type="application/x-shockwave-flash" width="14" height="15" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=public%20static%20synchronized%20Singleton%20getInstance()%7B%20%20%20%20%20%20%0A%20%20%20%20if%20(instance%20%3D%3D%20null)%20%20%20%20%20%20%0A%20%20%20%20instance%20%3D%20new%20Singleton()%3B%20%20%20%20%20%20%20%0A%20%20%20%20return%20instance%3B%20%20%20%20%20%20%20%0A%7D%20%20%20%20%20%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14">
public static synchronized Singleton getInstance(){
if (instance == null )
instance = new Singleton();
return instance;
}
public static synchronized Singleton getInstance(){
if (instance == null)
instance = new Singleton();
return instance;
}
榪欑瑙e喅鍔炴硶鐨勭‘鍙互闃叉閿欒鐨勫嚭鐜幫紝浣嗘槸瀹冨嵈寰堝獎鍝嶆ц兘錛氭瘡嬈¤皟鐢╣etInstance鏂規硶鐨勬椂鍊欓兘蹇呴』鑾峰緱Singleton鐨勯攣錛岃屽疄闄呬笂錛屽綋鍗曚緥瀹炰緥琚垱寤轟互鍚庯紝鍏跺悗鐨勮姹傛病鏈夊繀瑕佸啀浣跨敤浜掓枼鏈哄埗浜?/p>
3.2 double-checked locking
鏇劇粡鏈変漢涓轟簡瑙e喅浠ヤ笂闂錛屾彁鍑轟簡double-checked locking鐨勮В鍐蟲柟妗?/p>
Java浠g爜 < type="application/x-shockwave-flash" width="14" height="15" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=public%20static%20Singleton%20getInstance()%7B%20%20%20%20%20%20%0A%20%20%20%20if%20(instance%20%3D%3D%20null)%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20synchronized(instance)%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20if(instance%20%3D%3D%20null)%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20instance%20%3D%20new%20Singleton()%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%0A%20%20%20%20return%20instance%3B%20%20%20%20%20%20%20%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14">
public static Singleton getInstance(){
if (instance == null )
synchronized (instance){
if (instance == null )
instance = new Singleton();
}
return instance;
}
public static Singleton getInstance(){
if (instance == null)
synchronized(instance){
if(instance == null)
instance = new Singleton();
}
return instance;
} 璁╂垜浠潵鐪嬩竴涓嬭繖涓唬鐮佹槸濡備綍宸ヤ綔鐨勶細棣栧厛褰撲竴涓嚎紼嬪彂鍑鴻姹傚悗錛屼細鍏堟鏌nstance鏄惁涓簄ull錛屽鏋滀笉鏄垯鐩存帴榪斿洖鍏跺唴瀹癸紝榪欐牱閬垮厤浜嗚繘鍏?synchronized鍧楁墍闇瑕佽姳璐圭殑璧勬簮銆傚叾嬈★紝鍗充嬌絎?鑺傛彁鍒扮殑鎯呭喌鍙戠敓浜嗭紝涓や釜綰跨▼鍚屾椂榪涘叆浜嗙涓涓猧f鍒ゆ柇錛岄偅涔堜粬浠篃蹇呴』鎸夌収欏哄簭鎵ц synchronized鍧椾腑鐨勪唬鐮侊紝絎竴涓繘鍏ヤ唬鐮佸潡鐨勭嚎紼嬩細鍒涘緩涓涓柊鐨凷ingleton瀹炰緥錛岃屽悗緇殑綰跨▼鍒欏洜涓烘棤娉曢氳繃if鍒ゆ柇錛岃屼笉浼氬垱寤哄浣欑殑瀹炰緥銆?/p>
涓婅堪鎻忚堪浼間箮宸茬粡瑙e喅浜嗘垜浠潰涓寸殑鎵鏈夐棶棰橈紝浣嗗疄闄呬笂錛屼粠JVM鐨勮搴﹁錛岃繖浜涗唬鐮佷粛鐒跺彲鑳藉彂鐢熼敊璇?/p>
瀵逛簬JVM鑰岃█錛屽畠鎵ц鐨勬槸涓涓釜Java鎸囦護銆傚湪Java鎸囦護涓垱寤哄璞″拰璧嬪兼搷浣滄槸鍒嗗紑榪涜鐨勶紝涔熷氨鏄instance = new Singleton();璇彞鏄垎涓ゆ鎵ц鐨勩備絾鏄疛VM騫朵笉淇濊瘉榪欎袱涓搷浣滅殑鍏堝悗欏哄簭錛屼篃灝辨槸璇存湁鍙兘JVM浼氫負鏂扮殑Singleton瀹炰緥鍒嗛厤絀洪棿錛岀劧鍚庣洿鎺ヨ祴鍊肩粰instance鎴愬憳錛岀劧鍚庡啀鍘誨垵濮嬪寲榪欎釜Singleton瀹炰緥銆傝繖鏍峰氨浣垮嚭閿欐垚涓轟簡鍙兘錛屾垜浠粛鐒朵互A銆丅涓や釜綰跨▼涓轟緥錛?/p>
1. A銆丅綰跨▼鍚屾椂榪涘叆浜嗙涓涓猧f鍒ゆ柇
2. A棣栧厛榪涘叆synchronized鍧楋紝鐢變簬instance涓簄ull錛屾墍浠ュ畠鎵цinstance = new Singleton();
3. 鐢變簬JVM鍐呴儴鐨勪紭鍖栨満鍒訛紝JVM鍏堢敾鍑轟簡涓浜涘垎閰嶇粰Singleton瀹炰緥鐨勭┖鐧藉唴瀛橈紝騫惰祴鍊肩粰instance鎴愬憳錛堟敞鎰忔鏃禞VM娌℃湁寮濮嬪垵濮嬪寲榪欎釜瀹炰緥錛夛紝鐒跺悗A紱誨紑浜唖ynchronized鍧椼?/p>
4. B榪涘叆synchronized鍧楋紝鐢變簬instance姝ゆ椂涓嶆槸null錛屽洜姝ゅ畠椹笂紱誨紑浜唖ynchronized鍧楀茍灝嗙粨鏋滆繑鍥炵粰璋冪敤璇ユ柟娉曠殑紼嬪簭銆?/p>
5. 姝ゆ椂B綰跨▼鎵撶畻浣跨敤Singleton瀹炰緥錛屽嵈鍙戠幇瀹冩病鏈夎鍒濆鍖栵紝浜庢槸閿欒鍙戠敓浜嗐?/p>
4 閫氳繃鍐呴儴綾誨疄鐜板綰跨▼鐜涓殑鍗曚緥妯″紡
涓轟簡瀹炵幇鎱㈠姞杞斤紝騫朵笖涓嶅笇鏈涙瘡嬈¤皟鐢╣etInstance鏃墮兘蹇呴』浜掓枼鎵ц錛屾渶濂藉茍涓旀渶鏂逛究鐨勮В鍐沖姙娉曞涓嬶細
Java浠g爜 < type="application/x-shockwave-flash" width="14" height="15" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" src="http://xupo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=public%20class%20Singleton%7B%20%20%20%20%20%20%0A%20%20%20%20private%20Singleton()%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%E2%80%A6%20%20%20%20%20%20%0A%20%20%20%20%7D%20%20%20%20%20%20%0A%20%20%20%20private%20static%20class%20SingletonContainer%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20private%20static%20Singleton%20instance%20%3D%20new%20Singleton()%3B%20%20%20%20%20%20%0A%20%20%20%20%7D%20%20%20%20%20%20%0A%20%20%20%20public%20static%20Singleton%20getInstance()%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20return%20SingletonContainer.instance%3B%20%20%20%20%20%20%0A%20%20%20%20%7D%20%20%20%20%20%20%0A%7D%20%20%20%20%20%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14">
public class Singleton{
private Singleton(){
…
}
private static class SingletonContainer{
private static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonContainer.instance;
}
}
public class Singleton{
private Singleton(){
…
}
private static class SingletonContainer{
private static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonContainer.instance;
}
}
JVM鍐呴儴鐨勬満鍒惰兘澶熶繚璇佸綋涓涓被琚姞杞界殑鏃跺欙紝榪欎釜綾葷殑鍔犺澆榪囩▼鏄嚎紼嬩簰鏂ョ殑銆傝繖鏍峰綋鎴戜滑絎竴嬈¤皟鐢╣etInstance鐨勬椂鍊欙紝JVM鑳藉甯垜浠繚璇乮nstance鍙鍒涘緩涓嬈★紝騫朵笖浼氫繚璇佹妸璧嬪肩粰instance鐨勫唴瀛樺垵濮嬪寲瀹屾瘯錛岃繖鏍鋒垜浠氨涓嶇敤鎷呭績3.2涓殑闂銆傛澶栬鏂規硶涔熷彧浼氬湪絎竴嬈¤皟鐢ㄧ殑鏃跺欎嬌鐢ㄤ簰鏂ユ満鍒訛紝榪欐牱灝辮В鍐充簡3.1涓殑浣庢晥闂銆傛渶鍚巌nstance鏄湪絎竴嬈″姞杞絊ingletonContainer綾繪椂琚垱寤虹殑錛岃?SingletonContainer綾誨垯鍦ㄨ皟鐢╣etInstance鏂規硶鐨勬椂鍊欐墠浼氳鍔犺澆錛屽洜姝や篃瀹炵幇浜嗘儼鎬у姞杞姐?/p>
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛歨ttp://blog.csdn.net/fancyerII/archive/2010/03/15/5382349.aspx