;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
java绾跨▼鐨勭己闄 - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> JAVA棰戦亾 >> JAVA绾跨▼ >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

java绾跨▼鐨勭己闄

鍙戝竷: 2008-11-20 17:22 |  浣滆: 缃戠粶杞浇 |   鏉ユ簮: 缃戠粶杞浇 |  鏌ョ湅: 3娆

Allen Holub 鎸囧嚭锛孞ava 缂栫▼璇█鐨勭嚎绋嬫ā鍨嬪彲鑳芥槸姝よ瑷涓渶钖勫急鐨勯儴鍒嗐傚畠瀹屽叏涓嶉傚悎瀹為檯澶嶆潅绋嬪簭鐨勮姹傦紝鑰屼笖涔熷畬鍏ㄤ笉鏄潰鍚戝璞$殑銆傛湰鏂囧缓璁 Java 璇█杩涜閲嶅ぇ淇敼鍜岃ˉ鍏咃紝浠ヨВ鍐宠繖浜涢棶棰樸 Java 璇█鐨勭嚎绋嬫ā鍨嬫槸姝よ瑷鐨勪竴涓渶闅惧彟浜烘弧鎰忕殑閮ㄥ垎銆傚敖绠 Java 璇█鏈韩灏辨敮鎸佺嚎绋嬬紪绋嬫槸浠跺ソ浜嬶紝浣嗘槸瀹冨绾跨▼鐨勮娉曞拰绫诲寘鐨勬敮鎸佸お灏戯紝鍙兘閫傜敤浜庢瀬灏忓瀷鐨勫簲鐢ㄧ幆澧冦 鍏充簬 Java 绾跨▼缂栫▼鐨勫ぇ澶氭暟涔︾睄閮介暱绡囩疮鐗嶅湴鎸囧嚭浜 Java 绾跨▼妯″瀷鐨勭己闄凤紝骞舵彁渚涗簡瑙e喅杩欎簺闂鐨勬ユ晳鍖(Band-Aid/閭﹁开鍒涘彲璐)绫诲簱銆傛垜绉拌繖浜涚被涓烘ユ晳鍖咃紝鏄洜涓哄畠浠墍鑳借В鍐崇殑闂鏈簲鏄敱 Java 璇█鏈韩璇硶鎵鍖呭惈鐨勩備粠闀胯繙鏉ョ湅锛屼互璇硶鑰屼笉鏄被搴撴柟娉曪紝灏嗚兘浜х敓鏇撮珮鏁堢殑浠g爜銆傝繖鏄洜涓虹紪璇戝櫒鍜 Java 铏氭嫙鍣 (JVM) 鑳戒竴鍚屼紭鍖栫▼搴忎唬鐮侊紝鑰岃繖浜涗紭鍖栧浜庣被搴撲腑鐨勪唬鐮佹槸寰堥毦鎴栨棤娉曞疄鐜扮殑銆 鍦ㄦ垜鐨勩奣aming Java Threads 銆嬶紙璇峰弬闃 鍙傝冭祫鏂 锛変功涓互鍙婃湰鏂囦腑锛屾垜杩涗竴姝ュ缓璁 Java 缂栫▼璇█鏈韩杩涜涓浜涗慨鏀癸紝浠ヤ娇寰楀畠鑳藉鐪熸瑙e喅杩欎簺绾跨▼缂栫▼鐨勯棶棰樸傛湰鏂囧拰鎴戣繖鏈功鐨勪富瑕佸尯鍒槸锛屾垜鍦ㄦ挵鍐欐湰鏂囨椂杩涜浜嗘洿澶氱殑鎬濊, 鎵浠ュ涔︿腑鐨勬彁璁姞浠ヤ簡鎻愰珮銆傝繖浜涘缓璁彧鏄皾璇曟х殑 -- 鍙槸鎴戜釜浜哄杩欎簺闂鐨勬兂娉曪紝鑰屼笖瀹炵幇杩欎簺鎯虫硶闇瑕佽繘琛屽ぇ閲忕殑宸ヤ綔浠ュ強鍚岃浠殑璇勪环銆備絾杩欐槸姣曠珶鏄竴涓紑绔紝鎴戞湁鎰忎负瑙e喅杩欎簺闂鎴愮珛涓涓笓闂ㄧ殑宸ヤ綔缁勶紝 濡傛灉鎮ㄦ劅鍏磋叮锛岃鍙 e-mail 鍒 threading@holub.com 銆備竴鏃︽垜鐪熸鐫鎵嬭繘琛岋紝鎴戝氨浼氱粰鎮ㄥ彂閫氱煡銆 杩欓噷鎻愬嚭鐨勫缓璁槸闈炲父澶ц儐鐨勩傛湁浜涗汉寤鸿瀵 Java 璇█瑙勮寖 (JLS)锛堣鍙傞槄鍙傝冭祫鏂 锛夎繘琛岀粏寰拰灏戦噺鐨勪慨鏀逛互瑙e喅褰撳墠妯$硦鐨 JVM 琛屼负锛屼絾鏄垜鍗存兂瀵瑰叾杩涜鏇翠负褰诲簳鐨勬敼杩涖 鍦ㄥ疄闄呰崏绋夸腑锛屾垜鐨勮澶氬缓璁寘鎷负姝よ瑷寮曞叆鏂扮殑鍏抽敭瀛椼傝櫧鐒堕氬父瑕佹眰涓嶈绐佺牬涓涓瑷鐨勭幇鏈変唬鐮佹槸姝g‘鐨勶紝浣嗘槸濡傛灉璇ヨ瑷鐨勫苟涓嶆槸瑕佷繚鎸佷笉鍙樹互鑷充簬杩囨椂 鐨勮瘽锛屽畠灏卞繀椤昏兘寮曞叆鏂扮殑鍏抽敭瀛椼備负浜嗕娇寮曞叆鐨勫叧閿瓧涓庣幇鏈夌殑鏍囪瘑绗︿笉浜х敓鍐茬獊锛岀粡杩囩粏蹇冭冭檻锛屾垜灏嗕娇鐢ㄤ竴涓 ($) 瀛楃锛岃岃繖涓瓧绗﹀湪鐜版湁鐨勬爣璇嗙涓槸闈炴硶鐨勩(渚嬪锛屼娇鐢 $task锛岃屼笉鏄 task)銆傛鏃堕渶瑕佺紪璇戝櫒鐨勫懡浠よ寮鍏虫彁渚涙敮鎸侊紝鑳戒娇鐢ㄨ繖浜涘叧閿瓧鐨勫彉浣擄紝鑰屼笉鏄拷鐣ヨ繖涓編鍏冪鍙枫 task锛堜换鍔★級鐨勬蹇 Java 绾跨▼妯″瀷鐨勬牴鏈棶棰樻槸瀹冨畬鍏ㄤ笉鏄潰鍚戝璞$殑銆傞潰鍚戝璞 (OO) 璁捐浜哄憳鏍规湰涓嶆寜绾跨▼瑙掑害鑰冭檻闂锛涗粬浠冭檻鐨勬槸鍚屾 淇℃伅 寮傛 淇℃伅锛堝悓姝ヤ俊鎭绔嬪嵆澶勭悊 -- 鐩村埌淇℃伅澶勭悊瀹屾垚鎵嶈繑鍥炴秷鎭彞鏌勶紱寮傛淇℃伅鏀跺埌鍚庡皢鍦ㄥ悗鍙板鐞嗕竴娈垫椂闂 -- 鑰屾棭鍦ㄤ俊鎭鐞嗙粨鏉熷墠灏辫繑鍥炴秷鎭彞鏌勶級銆侸ava 缂栫▼璇█涓殑 Toolkit.getImage() 鏂规硶灏辨槸寮傛淇℃伅鐨勪竴涓ソ渚嬪瓙銆 getImage() 鐨勬秷鎭彞鏌勫皢琚珛鍗宠繑鍥烇紝鑰屼笉蹇呯瓑鍒版暣涓浘鍍忚鍚庡彴绾跨▼鍙栧洖銆 杩欐槸闈㈠悜瀵硅薄 (OO) 鐨勫鐞嗘柟娉曘備絾鏄紝濡傚墠鎵杩帮紝Java 鐨勭嚎绋嬫ā鍨嬫槸闈為潰鍚戝璞$殑銆備竴涓 Java 缂栫▼璇█绾跨▼瀹為檯涓婂彧鏄竴涓猺un() 杩囩▼锛屽畠璋冪敤浜嗗叾瀹冪殑杩囩▼銆傚湪杩欓噷灏辨牴鏈病鏈夊璞°佸紓姝ユ垨鍚屾淇℃伅浠ュ強鍏跺畠姒傚康銆 瀵逛簬姝ら棶棰橈紝鍦ㄦ垜鐨勪功涓繁鍏ヨ璁鸿繃鐨勪竴涓В鍐虫柟娉曟槸锛屼娇鐢ㄤ竴涓狝ctive_object銆 active 瀵硅薄鏄彲浠ユ帴鏀跺紓姝ヨ姹傜殑瀵硅薄锛屽畠鍦ㄦ帴鏀跺埌璇锋眰鍚庣殑涓娈垫椂闂村唴浠ュ悗鍙版柟寮忓緱浠ュ鐞嗐傚湪 Java 缂栫▼璇█涓紝涓涓姹傚彲琚皝瑁呭湪涓涓璞′腑銆備緥濡傦紝浣犲彲浠ユ妸涓涓氳繃 Runnable 鎺ュ彛瀹炵幇鐨勫疄渚嬩紶閫佺粰姝 active 瀵硅薄锛岃鎺ュ彛鐨 run() 鏂规硶灏佽浜嗛渶瑕佸畬鎴愮殑宸ヤ綔銆傝 runnable 瀵硅薄琚 active 瀵硅薄鎺掑叆鍒伴槦鍒椾腑锛屽綋杞埌瀹冩墽琛屾椂锛宎ctive 瀵硅薄浣跨敤涓涓悗鍙扮嚎绋嬫潵鎵ц瀹冦 鍦ㄤ竴涓 active 瀵硅薄涓婅繍琛岀殑寮傛淇℃伅瀹為檯涓婃槸鍚屾鐨勶紝鍥犱负瀹冧滑琚竴涓崟涓鐨勬湇鍔$嚎绋嬫寜椤哄簭浠庨槦鍒椾腑鍙栧嚭骞舵墽琛屻傚洜姝わ紝浣跨敤涓涓 active 瀵硅薄浠ヤ竴绉嶆洿涓鸿繃绋嬪寲鐨勬ā鍨嬪彲浠ユ秷闄ゅぇ澶氭暟鐨勫悓姝ラ棶棰樸 鍦ㄦ煇绉嶆剰涔変笂锛孞ava 缂栫▼璇█鐨勬暣涓 Swing/AWT 瀛愮郴缁熸槸涓涓 active 瀵硅薄銆傚悜涓涓 Swing 闃熷垪浼犻佷竴鏉¤鎭殑鍞竴瀹夊叏鐨勯斿緞鏄紝璋冪敤涓涓被浼糞wingUtilities.invokeLater() 鐨勬柟娉曪紝杩欐牱灏卞湪 Swing 浜嬩欢闃熷垪涓婂彂閫佷簡涓涓 runnable 瀵硅薄锛屽綋杞埌瀹冩墽琛屾椂锛 Swing 浜嬩欢澶勭悊绾跨▼灏嗕細澶勭悊瀹冦 閭d箞鎴戠殑绗竴涓缓璁槸锛屽悜 Java 缂栫▼璇█涓姞鍏ヤ竴涓猼ask 锛堜换鍔★級鐨勬蹇碉紝浠庤屽皢active 瀵硅薄闆嗘垚鍒拌瑷涓( task鐨勬蹇垫槸浠 Intel 鐨 RMX 鎿嶄綔绯荤粺鍜 Ada 缂栫▼璇█鍊熼壌杩囨潵鐨勩傚ぇ澶氭暟瀹炴椂鎿嶄綔绯荤粺閮芥敮鎸佺被浼肩殑姒傚康銆傦級 涓涓换鍔℃湁涓涓唴缃殑 active 瀵硅薄鍒嗗彂绋嬪簭锛屽苟鑷姩绠$悊閭d簺澶勭悊寮傛淇℃伅鐨勫叏閮ㄦ満鍒躲 瀹氫箟涓涓换鍔″拰瀹氫箟涓涓被鍩烘湰鐩稿悓锛屼笉鍚岀殑鍙槸闇瑕佸湪浠诲姟鐨勬柟娉曞墠鍔犱竴涓猘synchronous 淇グ绗︽潵鎸囩ず active 瀵硅薄鐨勫垎閰嶇▼搴忓湪鍚庡彴澶勭悊杩欎簺鏂规硶銆傝鍙傝冩垜鐨勪功涓涔濈珷鐨勫熀浜庣被鏂规硶锛屽啀鐪嬩互涓嬬殑 file_io 绫伙紝瀹冧娇鐢ㄤ簡鍦ㄣ Taming Java Threads 銆嬩腑鎵璁ㄨ鐨 Active_object 绫绘潵瀹炵幇寮傛鍐欐搷浣滐細 鎵鏈夌殑鍐欒姹傞兘鐢ㄤ竴涓猟ispatch() 杩囩▼璋冪敤琚斁鍦 active-object 鐨勮緭鍏ラ槦鍒椾腑鎺掗槦銆傚湪鍚庡彴澶勭悊杩欎簺寮傛淇℃伅鏃跺嚭鐜扮殑浠讳綍寮傚父 (exception) 閮界敱 Exception_handler 瀵硅薄澶勭悊锛屾 Exception_handler 瀵硅薄琚紶閫佸埌 File_io_task 鐨勬瀯閫犲嚱鏁颁腑銆傛偍瑕佸啓鍐呭鍒版枃浠舵椂锛屼唬鐮佸涓嬶細 杩欑鍩轰簬绫荤殑澶勭悊鏂规硶锛屽叾涓昏闂鏄お澶嶆潅浜 -- 瀵逛簬涓涓繖鏍风畝鍗曠殑鎿嶄綔锛屼唬鐮佸お鏉備簡銆傚悜 Java 璇█寮曞叆$task 鍜 $asynchronous 鍏抽敭瀛楀悗锛屽氨鍙互鎸変笅闈㈣繖鏍烽噸鍐欎互鍓嶇殑浠g爜锛 娉ㄦ剰锛屽紓姝ユ柟娉曞苟娌℃湁鎸囧畾杩斿洖鍊硷紝鍥犱负鍏跺彞鏌勫皢琚珛鍗宠繑鍥烇紝鑰屼笉鐢ㄧ瓑鍒拌姹傜殑鎿嶄綔澶勭悊瀹屾垚鍚庛傛墍浠ワ紝姝ゆ椂娌℃湁鍚堢悊鐨勮繑鍥炲笺傚浜庢淳鐢熷嚭鐨勬ā鍨嬶紝$task 鍏抽敭瀛楀拰 class 涓鏍峰悓鏁堬細 $task 鍙互瀹炵幇鎺ュ彛銆佺户鎵跨被鍜岀户鎵跨殑鍏跺畠浠诲姟銆傛爣鏈 asynchronous 鍏抽敭瀛楃殑鏂规硶鐢 $task 鍦ㄥ悗鍙板鐞嗐傚叾瀹冪殑鏂规硶灏嗗悓姝ヨ繍琛岋紝灏卞儚鍦ㄧ被涓竴鏍枫 $task鍏抽敭瀛楀彲浠ョ敤涓涓彲閫夌殑 $error 浠庡彞淇グ (濡備笂鎵绀)锛屽畠琛ㄦ槑瀵逛换浣曟棤娉曡寮傛鏂规硶鏈韩鎹曟崏鐨勫紓甯稿皢鏈変竴涓己鐪佺殑澶勭悊绋嬪簭銆傛垜浣跨敤 $ 鏉ヤ唬琛ㄨ鎶涘嚭鐨勫紓甯稿璞°傚鏋滄病鏈夋寚瀹 $error 浠庡彞锛屽氨灏嗘墦鍗板嚭涓涓悎鐞嗙殑鍑洪敊淇℃伅锛堝緢鍙兘鏄爢鏍堣窡韪俊鎭級銆 娉ㄦ剰锛屼负纭繚绾跨▼瀹夊叏锛屽紓姝ユ柟娉曠殑鍙傛暟蹇呴』鏄笉鍙 (immutable) 鐨勩傝繍琛屾椂绯荤粺搴旈氳繃鐩稿叧璇箟鏉ヤ繚璇佽繖绉嶄笉鍙樻э紙绠鍗曠殑澶嶅埗閫氬父鏄笉澶熺殑锛夈 鎵鏈夌殑 task 瀵硅薄蹇呴』鏀寔涓浜涗吉淇℃伅 (pseudo-message)锛屼緥濡傦細 闄や簡甯哥敤鐨勪慨楗扮锛坧ublic 绛)锛 task 鍏抽敭瀛楄繕搴旀帴鍙椾竴涓 $pooled(n) 淇グ绗︼紝瀹冨鑷 task 浣跨敤涓涓嚎绋嬫睜锛岃屼笉鏄娇鐢ㄥ崟涓嚎绋嬫潵杩愯寮傛璇锋眰銆 n 鎸囧畾浜嗘墍闇绾跨▼姹犵殑澶у皬锛涘繀瑕佹椂锛屾绾跨▼姹犲彲浠ュ鍔狅紝浣嗘槸褰撲笉鍐嶉渶瑕佺嚎绋嬫椂锛屽畠搴旇缂╁埌鍘熸潵鐨勫ぇ灏忋備吉鍩 (pseudo-field) $pool_size 杩斿洖鍦 $pooled(n) 涓寚瀹氱殑鍘熷 n 鍙傛暟鍊笺 鍦ㄣ奣aming Java Threads 銆嬬殑绗叓绔犱腑锛屾垜缁欏嚭浜嗕竴涓湇鍔″櫒绔殑 socket 澶勭悊绋嬪簭锛屼綔涓虹嚎绋嬫睜鐨勪緥瀛愩傚畠鏄叧浜庝娇鐢ㄧ嚎绋嬫睜鐨勪换鍔$殑涓涓ソ渚嬪瓙銆傚叾鍩烘湰鎬濊矾鏄骇鐢熶竴涓嫭绔嬪璞★紝瀹冪殑浠诲姟鏄洃鎺т竴涓湇鍔″櫒绔殑 socket銆傛瘡褰撲竴涓鎴锋満杩炴帴鍒版湇鍔″櫒鏃讹紝鏈嶅姟鍣ㄧ鐨勫璞′細浠庢睜涓姄鍙栦竴涓鍏堝垱寤虹殑鐫$湢绾跨▼锛屽苟鎶婃绾跨▼璁剧疆涓烘湇鍔′簬瀹㈡埛绔繛鎺ャ俿ocket 鏈嶅姟鍣ㄤ細浜у嚭涓涓澶栫殑瀹㈡埛鏈嶅姟绾跨▼锛屼絾鏄綋杩炴帴鍏抽棴鏃讹紝杩欎簺棰濆鐨勭嚎绋嬪皢琚垹闄ゃ傚疄鐜 socket 鏈嶅姟鍣ㄧ殑鎺ㄨ崘璇硶濡備笅锛 Socket_server瀵硅薄浣跨敤涓涓嫭绔嬬殑鍚庡彴绾跨▼澶勭悊寮傛鐨 listen() 璇锋眰锛屽畠灏佽 socket 鐨勨滄帴鍙椻濆惊鐜傚綋姣忎釜瀹㈡埛绔繛鎺ユ椂锛 listen() 璇锋眰涓涓 Client_handler 閫氳繃璋冪敤 handle() 鏉ュ鐞嗚姹傘傛瘡涓 handle() 璇锋眰鍦ㄥ畠浠嚜宸辩殑绾跨▼涓墽琛岋紙鍥犱负杩欐槸涓涓 $pooled 浠诲姟)銆 娉ㄦ剰锛屾瘡涓紶閫佸埌$pooled $task 鐨勫紓姝ユ秷鎭疄闄呬笂閮戒娇鐢ㄥ畠浠嚜宸辩殑绾跨▼鏉ュ鐞嗐傚吀鍨嬫儏鍐典笅锛岀敱浜庝竴涓 $pooled $task 鐢ㄤ簬瀹炵幇涓涓嚜涓绘搷浣滐紱鎵浠ュ浜庤В鍐充笌璁块棶鐘舵佸彉閲忔湁鍏崇殑娼滃湪鐨勫悓姝ラ棶棰橈紝鏈濂界殑瑙e喅鏂规硶鏄湪 $asynchronous 鏂规硶涓娇鐢 this 鏄寚鍚戠殑瀵硅薄鐨勪竴涓嫭鏈夊壇鏈傝繖灏辨槸璇达紝褰撳悜涓涓 $pooled $task 鍙戦佷竴涓紓姝ヨ姹傛椂锛屽皢鎵ц涓涓 clone() 鎿嶄綔锛屽苟涓旀鏂规硶鐨 this 鎸囬拡浼氭寚鍚戞鍏嬮殕瀵硅薄銆傜嚎绋嬩箣闂寸殑閫氫俊鍙氳繃瀵 static 鍖虹殑鍚屾璁块棶瀹炵幇銆 鏀硅繘synchronized 铏界劧鍦ㄥ鏁版儏鍐典笅锛$task 娑堥櫎浜嗗悓姝ユ搷浣滅殑瑕佹眰锛屼絾鏄笉鏄墍鏈夌殑澶氱嚎绋嬬郴缁熼兘鐢ㄤ换鍔℃潵瀹炵幇銆傛墍浠ワ紝杩橀渶瑕佹敼杩涚幇鏈夌殑绾跨▼妯″潡銆 synchronized 鍏抽敭瀛楁湁涓嬪垪缂虹偣锛 鏃犳硶鎸囧畾涓涓秴鏃跺笺 鏃犳硶涓柇涓涓鍦ㄧ瓑寰呰姹傞攣鐨勭嚎绋嬨 鏃犳硶瀹夊叏鍦拌姹傚涓攣 銆(澶氫釜閿佸彧鑳戒互渚濇搴忚幏寰椼) 瑙e喅杩欎簺闂鐨勫姙娉曟槸锛氭墿灞晄ynchronized 鐨勮娉曪紝浣垮畠鏀寔澶氫釜鍙傛暟鍜岃兘鎺ュ彈涓涓秴鏃惰鏄庯紙鍦ㄤ笅闈㈢殑鎷姬涓寚瀹氾級銆備笅闈㈡槸鎴戝笇鏈涚殑璇硶锛 synchronized(x && y && z) 鑾峰緱 x銆亂 鍜 z 瀵硅薄鐨勯攣銆 synchronized(x || y || z) 鑾峰緱 x銆亂 鎴 z 瀵硅薄鐨勯攣銆 synchronized( (x && y ) || z) 瀵逛簬鍓嶉潰浠g爜鐨勪竴浜涙墿灞曘 synchronized(...)[1000] 璁剧疆 1 绉掕秴鏃朵互鑾峰緱涓涓攣銆 synchronized[1000] f(){...} 鍦ㄨ繘鍏 f() 鍑芥暟鏃惰幏寰 this 鐨勯攣锛屼絾鍙湁 1 绉掕秴鏃躲 TimeoutException鏄 RuntimeException 娲剧敓绫伙紝瀹冨湪绛夊緟瓒呮椂鍚庡嵆琚姏鍑恒 瓒呮椂鏄渶瑕佺殑锛屼絾杩樹笉瓒充互浣夸唬鐮佸己澹傛偍杩橀渶瑕佸叿澶囦粠澶栭儴涓璇锋眰閿佺瓑寰呯殑鑳藉姏銆傛墍浠ワ紝褰撳悜涓涓瓑寰呴攣鐨勭嚎绋嬩紶閫佷竴涓猧nterrupt() 鏂规硶鍚庯紝姝ゆ柟娉曞簲鎶涘嚭涓涓 SynchronizationException 瀵硅薄锛屽苟涓柇绛夊緟鐨勭嚎绋嬨傝繖涓紓甯稿簲鏄 RuntimeException 鐨勪竴涓淳鐢熺被锛岃繖鏍蜂笉蹇呯壒鍒鐞嗗畠銆 瀵箂ynchronized 璇硶杩欎簺鎺ㄨ崘鐨勬洿鏀规柟娉曠殑涓昏闂鏄紝瀹冧滑闇瑕佸湪浜岃繘鍒朵唬鐮佺骇涓婁慨鏀广傝岀洰鍓嶈繖浜涗唬鐮佷娇鐢ㄨ繘鍏ョ洃鎺(enter-monitor)鍜岄鍑虹洃鎺(exit- monitor)鎸囦护鏉ュ疄鐜 synchronized 銆傝岃繖浜涙寚浠ゆ病鏈夊弬鏁帮紝鎵浠ラ渶瑕佹墿灞曚簩杩涘埗浠g爜鐨勫畾涔変互鏀寔澶氫釜閿佸畾璇锋眰銆備絾鏄繖绉嶄慨鏀逛笉浼氭瘮鍦 Java 2 涓慨鏀 Java 铏氭嫙鏈虹殑鏇磋交鏉撅紝浣嗗畠鏄悜涓嬪吋瀹圭幇瀛樼殑 Java 浠g爜銆 鍙︿竴涓彲瑙e喅鐨勯棶棰樻槸鏈甯歌鐨勬閿佹儏鍐碉紝鍦ㄨ繖绉嶆儏鍐典笅锛屼袱涓嚎绋嬮兘鍦ㄧ瓑寰呭鏂瑰畬鎴愭煇涓搷浣溿傝鎯充笅闈㈢殑涓涓緥瀛愶紙鍋囪鐨勶級锛 璁炬兂涓涓嚎绋嬭皟鐢╝() 锛屼絾鍦ㄨ幏寰椼 lock1 涔嬪悗鍦ㄨ幏寰 lock2 涔嬪墠琚墺澶鸿繍琛屾潈銆 绗簩涓嚎绋嬭繘鍏ヨ繍琛岋紝璋冪敤 b() 锛岃幏寰椾簡 lock2 锛屼絾鏄敱浜庣涓涓嚎绋嬪崰鐢 lock1 锛屾墍浠ュ畠鏃犳硶鑾峰緱 lock1 锛屾墍浠ュ畠闅忓悗澶勪簬绛夊緟鐘舵併傛鏃剁涓涓嚎绋嬭鍞ら啋锛屽畠璇曞浘鑾峰緱 lock2 锛屼絾鏄敱浜庤绗簩涓嚎绋嬪崰鎹紝鎵浠ユ棤娉曡幏寰椼傛鏃跺嚭鐜版閿併備笅闈㈢殑 synchronize-on-multiple-objects 鐨勮娉曞彲瑙e喅杩欎釜闂锛 缂栬瘧鍣(鎴栬櫄鎷熸満)浼氶噸鏂版帓鍒楄姹傞攣鐨勯『搴忥紝浣縧ock1 鎬绘槸琚鍏堣幏寰楋紝杩欏氨娑堥櫎浜嗘閿併 浣嗘槸锛岃繖绉嶆柟娉曞澶氱嚎绋嬩笉涓瀹氭绘垚鍔燂紝鎵浠ュ緱鎻愪緵涓浜涙柟娉曟潵鑷姩鎵撶牬姝婚攣銆備竴涓畝鍗曠殑鍔炴硶灏辨槸鍦ㄧ瓑寰呯浜屼釜閿佹椂甯搁噴鏀惧凡鑾峰緱鐨勯攣銆傝繖灏辨槸璇达紝搴旈噰鍙栧涓嬬殑 绛夊緟鏂瑰紡锛岃屼笉鏄案杩滅瓑寰咃細 濡傛灉绛夊緟閿佺殑姣忎釜绋嬪簭浣跨敤涓嶅悓鐨勮秴鏃跺硷紝灏卞彲鎵撶牬姝婚攣鑰屽叾涓竴涓嚎绋嬪氨鍙繍琛屻傛垜寤鸿鐢ㄤ互涓嬬殑璇硶鏉ュ彇浠e墠闈㈢殑浠g爜锛 synchronized璇彞灏嗘案杩滅瓑寰咃紝浣嗘槸瀹冩椂甯镐細鏀惧純宸茶幏寰楃殑閿佷互鎵撶牬娼滃湪鐨勬閿佸彲鑳姐傚湪鐞嗘兂鎯呭喌涓嬶紝姣忎釜閲嶅绛夊緟鐨勮秴鏃跺兼瘮鍓嶄竴涓浉宸竴闅忔満鍊笺 鏀硅繘wait() 鍜 notify() wait()/ notify() 绯荤粺涔熸湁涓浜涢棶棰橈細 鏃犳硶妫娴 wait() 鏄甯歌繑鍥炶繕鏄洜瓒呮椂杩斿洖銆 鏃犳硶浣跨敤浼犵粺鏉′欢鍙橀噺鏉ュ疄鐜板浜庝竴涓滀俊鍙封(signaled)鐘舵併 澶鏄撳彂鐢熷祵濂楃殑鐩戞帶(monitor)閿佸畾銆 瓒呮椂妫娴嬮棶棰樺彲浠ラ氳繃閲嶆柊瀹氫箟wait() 浣垮畠杩斿洖涓涓 boolean 鍙橀噺 (鑰屼笉鏄 void ) 鏉ヨВ鍐炽備竴涓 true 杩斿洖鍊兼寚绀轰竴涓甯歌繑鍥烇紝鑰 false 鎸囩ず鍥犺秴鏃惰繑鍥炪 鍩轰簬鐘舵佺殑鏉′欢鍙橀噺鐨勬蹇垫槸寰堥噸瑕佺殑銆傚鏋滄鍙橀噺琚缃垚false 鐘舵侊紝閭d箞绛夊緟鐨勭嚎绋嬪皢瑕佽闃绘柇锛岀洿鍒版鍙橀噺杩涘叆 true 鐘舵侊紱浠讳綍绛夊緟 true 鐨勬潯浠跺彉閲忕殑绛夊緟绾跨▼浼氳鑷姩閲婃斁銆 (鍦ㄨ繖绉嶆儏鍐典笅锛 wait() 璋冪敤涓嶄細鍙戠敓闃绘柇銆)銆傞氳繃濡備笅鎵╁睍 notify() 鐨勮娉曪紝鍙互鏀寔杩欎釜鍔熻兘锛 宓屽鐩戞帶閿佸畾闂闈炲父楹荤儲锛屾垜骞舵病鏈夌畝鍗曠殑瑙e喅鍔炴硶銆傚祵濂楃洃鎺ч攣瀹氭槸涓绉嶆閿佸舰寮忥紝褰撴煇涓攣鐨勫崰鏈夌嚎绋嬪湪鎸傝捣鍏惰嚜韬箣鍓嶄笉閲婃斁閿佹椂锛屼細鍙戠敓杩欑宓屽鐩戞帶灏 閿併備笅闈㈡槸姝ら棶棰樼殑涓涓緥瀛愶紙杩樻槸鍋囪鐨勶級锛屼絾鏄疄闄呯殑渚嬪瓙鏄潪甯稿鐨勶細 姝や緥涓紝鍦╣et() 鍜 put() 鎿嶄綔涓秹鍙婁袱涓攣锛氫竴涓湪 Stack 瀵硅薄涓婏紝鍙︿竴涓湪 LinkedList 瀵硅薄涓娿備笅闈㈡垜浠冭檻褰撲竴涓嚎绋嬭瘯鍥捐皟鐢ㄤ竴涓┖鏍堢殑 pop() 鎿嶄綔鏃剁殑鎯呭喌銆傛绾跨▼鑾峰緱杩欎袱涓攣锛岀劧鍚庤皟鐢 wait() 閲婃斁 Stack 瀵硅薄涓 鐨勯攣锛屼絾鏄病鏈夐噴鏀惧湪 list 涓婄殑閿併傚鏋滄鏃剁浜屼釜绾跨▼璇曞浘鍚戝爢鏍堜腑鍘嬪叆涓涓璞★紝瀹冧細鍦 synchronized(list) 璇彞涓婃案杩滄寕璧凤紝鑰屼笖姘歌繙涓嶄細琚厑璁稿帇鍏ヤ竴涓璞°傜敱浜庣涓涓嚎绋嬬瓑寰呯殑鏄竴涓潪绌烘爤锛岃繖鏍峰氨浼氬彂鐢熸閿併傝繖灏辨槸璇达紝绗竴涓嚎绋嬫案杩滄棤娉曚粠 wait() 杩斿洖锛屽洜涓虹敱浜庡畠鍗犳嵁鐫閿侊紝鑰屽鑷寸浜屼釜绾跨▼姘歌繙鏃犳硶杩愯鍒 notify() 璇彞銆 鍦ㄨ繖涓緥瀛愪腑锛屾湁寰堝鏄庢樉鐨勫姙娉曟潵瑙e喅闂锛氫緥濡傦紝瀵逛换浣曠殑鏂规硶閮戒娇鐢ㄥ悓姝ャ備絾鏄湪鐪熷疄涓栫晫涓紝瑙e喅鏂规硶閫氬父涓嶆槸杩欎箞绠鍗曘 涓涓彲琛岀殑鏂规硶鏄紝鍦╳ait() 涓寜鐓у弽椤哄簭閲婃斁褰撳墠绾跨▼鑾峰彇鐨 鎵鏈 閿侊紝鐒跺悗褰撶瓑寰呮潯浠舵弧瓒冲悗锛岄噸鏂版寜鍘熷鑾峰彇椤哄簭鍙栧緱瀹冧滑銆備絾鏄紝鎴戣兘鎯宠薄鍑哄埄鐢ㄨ繖绉嶆柟寮忕殑浠g爜瀵逛簬浜轰滑鏉ヨ绠鐩存棤娉曠悊瑙o紝鎵浠ユ垜璁や负瀹冧笉鏄竴涓湡姝e彲琛岀殑 鏂规硶銆傚鏋滄偍鏈夊ソ鐨勬柟娉曪紝璇风粰鎴戝彂 e-mail銆 鎴戜篃甯屾湜鑳界瓑鍒颁笅杩板鏉傛潯浠惰瀹炵幇鐨勪竴澶┿備緥濡傦細 鍏朵腑a 銆 b 鍜 c 鏄换鎰忓璞° 淇敼Thread 绫 鍚屾椂鏀寔鎶㈠崰寮忓拰鍗忎綔寮忕嚎绋嬬殑鑳藉姏鍦ㄦ煇浜涙湇鍔″櫒搴旂敤绋嬪簭涓槸鍩烘湰瑕佹眰锛屽挨鍏舵槸鍦ㄦ兂浣跨郴缁熻揪鍒版渶楂樻ц兘鐨勬儏鍐典笅銆傛垜璁や负 Java 缂栫▼璇█鍦ㄧ畝鍖栫嚎绋嬫ā鍨嬩笂璧板緱澶繙浜嗭紝骞朵笖 Java 缂栫▼璇█搴旀敮鎸 Posix/Solaris 鐨勨滅豢鑹(green)绾跨▼鈥濆拰鈥滆交渚(lightweight)杩涚▼鈥濇蹇碉紙鍦ㄢ滐紙Taming Java Threads 鈥濈涓绔犱腑璁ㄨ锛夈 杩欏氨鏄锛屾湁浜 Java 铏氭嫙鏈虹殑瀹炵幇锛堜緥濡傚湪 NT 涓婄殑 Java 铏氭嫙鏈猴級搴斿湪鍏跺唴閮ㄤ豢鐪熷崗浣滃紡杩涚▼锛屽叾瀹 Java 铏氭嫙鏈哄簲浠跨湡鎶㈠崰寮忕嚎绋嬨傝屼笖鍚 Java 铏氭嫙鏈哄姞鍏ヨ繖浜涙墿灞曟槸寰堝鏄撶殑銆 涓涓 Java 鐨凾hread 搴斿缁堟槸鎶㈠崰寮忕殑銆傝繖灏辨槸璇达紝涓涓 Java 缂栫▼璇█鐨勭嚎绋嬪簲鍍 Solaris 鐨勮交渚胯繘绋嬩竴鏍峰伐浣溿 Runnable 鎺ュ彛鍙互鐢ㄤ簬瀹氫箟涓涓 Solaris 寮忕殑鈥滅豢鑹茬嚎绋嬧濓紝姝ょ嚎绋嬪繀闇鑳芥妸鎺у埗鏉冭浆缁欒繍琛屽湪鐩稿悓杞讳究杩涚▼涓殑鍏跺畠缁胯壊绾跨▼銆 渚嬪锛岀洰鍓嶇殑璇硶锛 鑳芥湁鏁堝湴涓篟unnable 瀵硅薄浜х敓涓涓豢鑹茬嚎绋嬶紝骞舵妸瀹冪粦瀹氬埌鐢 Thread 瀵硅薄浠h〃鐨勮交渚胯繘绋嬩腑銆傝繖绉嶅疄鐜板浜庣幇鏈変唬鐮佹槸閫忔槑鐨勶紝鍥犱负瀹冪殑鏈夋晥鎬у拰鐜版湁鐨勫畬鍏ㄤ竴鏍枫 鎶奟unnable 瀵硅薄鎯虫垚涓虹豢鑹茬嚎绋嬶紝浣跨敤杩欑鏂规硶锛屽彧闇鍚 Thread 鐨勬瀯閫犲嚱鏁颁紶閫掑嚑涓 Runnable 瀵硅薄锛屽氨鍙互鎵╁睍 Java 缂栫▼璇█鐨勭幇鏈夎娉曪紝浠ユ敮鎸佸湪涓涓崟涓杞讳究绾跨▼鏈夊涓豢鑹茬嚎绋嬨傦紙缁胯壊绾跨▼涔嬮棿鍙互鐩镐簰鍗忎綔锛屼絾鏄畠浠彲琚繍琛屽湪鍏跺畠杞讳究杩涚▼ ( Thread 瀵硅薄) 涓婄殑缁胯壊杩涚▼( Runnable 瀵硅薄) 鎶㈠崰銆傦級銆備緥濡傦紝涓嬮潰鐨勪唬鐮佷細涓烘瘡涓 runnable 瀵硅薄鍒涘缓涓涓豢鑹茬嚎绋嬶紝杩欎簺缁胯壊绾跨▼浼氬叡浜敱 Thread 瀵硅薄浠h〃鐨勮交渚胯繘绋嬨 鐜版湁鐨勮鐩(override)Thread 瀵硅薄骞跺疄鐜 run() 鐨勪範鎯户缁湁鏁堬紝浣嗘槸瀹冨簲鏄犲皠鍒颁竴涓缁戝畾鍒颁竴杞讳究杩涚▼鐨勭豢鑹茬嚎绋嬨(鍦 Thread() 绫讳腑鐨勭己鐪 run() 鏂规硶浼氬湪鍐呴儴鏈夋晥鍦板垱寤虹浜屼釜 Runnable 瀵硅薄銆) 绾跨▼闂寸殑鍗忎綔 搴斿湪璇█涓姞鍏ユ洿澶氱殑鍔熻兘浠ユ敮鎸佺嚎绋嬮棿鐨勭浉浜掗氫俊銆傜洰鍓嶏紝PipedInputStream 鍜 PipedOutputStream 绫诲彲鐢ㄤ簬杩欎釜鐩殑銆備絾鏄浜庡ぇ澶氭暟搴旂敤绋嬪簭锛屽畠浠お寮变簡銆傛垜寤鸿鍚 Thread 绫诲姞鍏ヤ笅鍒楀嚱鏁帮細 澧炲姞涓涓 wait_for_start() 鏂规硶锛屽畠閫氬父澶勪簬闃诲鐘舵侊紝鐩村埌涓涓嚎绋嬬殑 run() 鏂规硶鍚姩銆(濡傛灉绛夊緟鐨勭嚎绋嬪湪璋冪敤 run 涔嬪墠琚噴鏀撅紝杩欐病鏈変粈涔堥棶棰橈級銆傜敤杩欑鏂规硶锛屼竴涓嚎绋嬪彲浠ュ垱寤轰竴涓垨澶氫釜杈呭姪绾跨▼锛屽苟淇濊瘉鍦ㄥ垱寤虹嚎绋嬬户缁墽琛屾搷浣滀箣鍓嶏紝杩欎簺杈呭姪绾跨▼浼氬浜庤繍琛岀姸鎬併 锛堝悜 Object 绫伙級澧炲姞 $send (Object o) 鍜 Object=$receive() 鏂规硶锛屽畠浠皢浣跨敤涓涓唴閮ㄩ樆鏂槦鍒楀湪绾跨▼涔嬮棿浼犻佸璞°傞樆鏂槦鍒楀簲浣滀负绗竴涓 $send() 璋冪敤鐨勫壇浜у搧琚嚜鍔ㄥ垱寤恒 $send() 璋冪敤浼氭妸瀵硅薄鍔犲叆闃熷垪銆 $receive() 璋冪敤閫氬父澶勪簬闃诲鐘舵侊紝鐩村埌鏈変竴涓璞¤鍔犲叆闃熷垪锛岀劧鍚庡畠杩斿洖姝ゅ璞°傝繖绉嶆柟娉曚腑鐨勫彉閲忓簲鏀寔璁惧畾鍏ラ槦鍜屽嚭闃熺殑鎿嶄綔瓒呮椂鑳藉姏锛 $send (Object o, long timeout) 鍜 $receive (long timeout)銆 瀵逛簬璇诲啓閿佺殑鍐呴儴鏀寔 璇诲啓閿佺殑姒傚康搴斿唴缃埌 Java 缂栫▼璇█涓傝鍐欏櫒閿佸湪鈥淭aming Java Threads 鈥濓紙鍜屽叾瀹冨湴鏂癸級涓湁璇︾粏璁ㄨ锛屾鎷湴璇达細涓涓鍐欓攣鏀寔澶氫釜绾跨▼鍚屾椂璁块棶涓涓璞★紝浣嗘槸鍦ㄥ悓涓鏃跺埢鍙湁涓涓嚎绋嬪彲浠ヤ慨鏀规瀵硅薄锛屽苟涓斿湪璁块棶杩涜鏃朵笉鑳戒慨 鏀广傝鍐欓攣鐨勮娉曞彲浠ュ熺敤 synchronized 鍏抽敭瀛楋細 瀵逛簬涓涓璞★紝搴旇鍙湁鍦$writing 鍧椾腑娌℃湁绾跨▼鏃讹紝鎵嶆敮鎸佸涓嚎绋嬭繘鍏 $reading 鍧椼傚湪杩涜璇绘搷浣滄椂锛屼竴涓瘯鍥捐繘鍏 $writing 鍧楃殑绾跨▼浼氳闃绘柇锛岀洿鍒拌绾跨▼閫鍑 $reading 鍧椼 褰撴湁鍏跺畠绾跨▼澶勪簬 $writing 鍧楁椂锛岃瘯鍥捐繘鍏 $reading 鎴 $writing 鍧楃殑绾跨▼浼氳闃绘柇锛岀洿鍒版鍐欑嚎绋嬮鍑 $writing 鍧椼 濡傛灉璇诲拰鍐欑嚎绋嬮兘鍦ㄧ瓑寰咃紝缂虹渷鎯呭喌涓嬶紝璇荤嚎绋嬩細棣栧厛杩涜銆備絾鏄紝鍙互浣跨敤$writer_priority 灞炴т慨鏀圭被鐨勫畾涔夋潵鏀瑰彉杩欑缂虹渷鏂瑰紡銆傚锛 璁块棶閮ㄥ垎鍒涘缓鐨勫璞″簲鏄潪娉曠殑 褰撳墠鎯呭喌涓嬶紝JLS 鍏佽璁块棶閮ㄥ垎鍒涘缓鐨勫璞°備緥濡傦紝鍦ㄤ竴涓瀯閫犲嚱鏁颁腑鍒涘缓鐨勭嚎绋嬪彲浠ヨ闂琚垱寤虹殑瀵硅薄锛屾棦浣挎瀵硅薄娌℃湁瀹屽叏琚垱寤恒備笅闈唬鐮佺殑缁撴灉鏃犳硶纭畾锛 璁剧疆x 涓 -1 鐨勭嚎绋嬪彲浠ュ拰璁剧疆 x 涓 0 鐨勭嚎绋嬪悓鏃惰繘琛屻傛墍浠ワ紝姝ゆ椂 x 鐨勫兼棤娉曢娴嬨 瀵规闂鐨勪竴涓В鍐虫柟娉曟槸锛屽湪鏋勯犲嚱鏁版病鏈夎繑鍥炰箣鍓嶏紝瀵逛簬鍦ㄦ鏋勯犲嚱鏁颁腑鍒涘缓鐨勭嚎绋嬶紝鏃娇瀹冪殑浼樺厛绾ф瘮璋冪敤new 鐨勭嚎绋嬮珮锛屼篃瑕佺姝㈣繍琛屽畠鐨 run() 鏂规硶銆 杩欏氨鏄锛屽湪鏋勯犲嚱鏁拌繑鍥炰箣鍓嶏紝start() 璇锋眰蹇呴』琚帹杩熴 鍙﹀锛孞ava 缂栫▼璇█搴斿彲鍏佽鏋勯犲嚱鏁扮殑鍚屾銆傛崲鍙ヨ瘽璇达紝涓嬮潰鐨勪唬鐮侊紙鍦ㄥ綋鍓嶆儏鍐典笅鏄潪娉曠殑锛変細璞¢鏈熺殑閭f牱宸ヤ綔锛 鎴戣涓虹涓绉嶆柟娉曟瘮绗簩绉嶆洿绠娲侊紝浣嗗疄鐜拌捣鏉ユ洿涓哄洶闅俱 volatile鍏抽敭瀛楀簲璞¢鏈熺殑閭f牱宸ヤ綔 JLS 瑕佹眰淇濈暀瀵逛簬 volatile 鎿嶄綔鐨勮姹傘傚ぇ澶氭暟 Java 铏氭嫙鏈洪兘绠鍗曞湴蹇界暐浜嗚繖閮ㄥ垎鍐呭锛岃繖鏄笉搴旇鐨勩傚湪澶氬鐞嗗櫒鐨勬儏鍐典笅锛岃澶氫富鏈洪兘鍑虹幇浜嗚繖绉嶉棶棰橈紝浣嗘槸瀹冩湰搴旂敱 JLS 鍔犱互瑙e喅鐨勩傚鏋滄偍瀵硅繖鏂归潰鎰熷叴瓒o紝椹噷鍏板ぇ瀛︾殑 Bill Pugh 姝e湪鑷村姏浜庤繖椤瑰伐浣滐紙璇峰弬闃呭弬鑰冭祫鏂 锛夈 璁块棶鐨勯棶棰 濡傛灉缂哄皯鑹ソ鐨勮闂帶鍒讹紝浼氫娇绾跨▼缂栫▼闈炲父鍥伴毦銆傚ぇ澶氭暟鎯呭喌涓嬶紝濡傛灉鑳戒繚璇佺嚎绋嬪彧浠庡悓姝ュ瓙绯荤粺涓皟鐢紝涓嶅繀鑰冭檻绾跨▼瀹夊叏(threadsafe)闂銆傛垜 寤鸿瀵 Java 缂栫▼璇█鐨勮闂潈闄愭蹇靛仛濡備笅闄愬埗锛涘簲绮剧‘浣跨敤 package 鍏抽敭瀛楁潵闄愬埗鍖呰闂潈銆傛垜璁や负褰撶己鐪佽涓虹殑瀛樺湪鏄换浣曚竴绉嶈绠楁満璇█鐨勪竴涓憰鐤碉紝鎴戝鐜板湪瀛樺湪杩欑缂虹渷鏉冮檺鎰熷埌寰堣糠鎯戯紙鑰屼笖杩欑缂虹渷鏄滃寘 (package)鈥濈骇鍒殑鑰屼笉鏄滅鏈(private)鈥濓級銆傚湪鍏跺畠鏂归潰锛孞ava 缂栫▼璇█閮戒笉鎻愪緵绛夊悓鐨勭己鐪佸叧閿瓧銆傝櫧鐒朵娇鐢ㄦ樉寮忕殑 package 鐨勯檺瀹氳瘝浼氱牬鍧忕幇鏈変唬鐮侊紝浣嗘槸瀹冨皢浣夸唬鐮佺殑鍙鎬ф洿寮猴紝骞惰兘娑堥櫎鏁翠釜绫荤殑娼滃湪閿欒 (渚嬪锛屽鏋滆闂潈鏄敱浜庨敊璇蹇界暐锛岃屼笉鏄鏁呮剰蹇界暐)銆 閲嶆柊寮曞叆 private protected 锛屽畠鐨勫姛鑳藉簲鍜岀幇鍦ㄧ殑 protected 涓鏍凤紝浣嗘槸涓嶅簲鍏佽鍖呯骇鍒殑璁块棶銆 鍏佽 private private 璇硶鎸囧畾鈥滃疄鐜扮殑璁块棶鈥濆浜庢墍鏈夊閮ㄥ璞℃槸绉佹湁鐨勶紝鐢氳嚦鏄綋鍓嶅璞℃槸鐨勫悓涓涓被鐨勩傚浜庘.鈥濆乏杈圭殑鍞竴寮曠敤锛堥殣寮忔垨鏄惧紡锛夊簲鏄 this 銆 鎵╁睍 public 鐨勮娉曪紝浠ユ巿鏉冨畠鍙埗瀹氱壒瀹氱被鐨勮闂備緥濡傦紝涓嬮潰鐨勪唬鐮佸簲鍏佽 Fred 绫荤殑瀵硅薄鍙皟鐢 some_method() 锛屼絾鏄鍏跺畠绫荤殑瀵硅薄锛岃繖涓柟娉曞簲鏄鏈夌殑銆 杩欑寤鸿涓嶅悓浜 C++ 鐨 "friend" 鏈哄埗銆 鍦 "friend" 鏈哄埗涓紝瀹冩巿鏉冧竴涓被璁块棶鍙︿竴涓被鐨勬墍鏈 绉佹湁閮ㄥ垎銆傚湪杩欓噷锛屾垜寤鸿瀵规湁闄愮殑鏂规硶闆嗗悎杩涜涓ユ牸鎺у埗鐨勮闂傜敤杩欑鏂规硶锛屼竴涓被鍙互涓哄彟涓涓被瀹氫箟涓涓帴鍙o紝鑰岃繖涓帴鍙e绯荤粺鐨勫叾浣欑被鏄笉鍙鐨勩備竴 涓槑鏄剧殑鍙樺寲鏄細 闄ら潪鍩熷紩鐢ㄧ殑鏄湡姝d笉鍙(immutable)鐨勫璞℃垨static final 鍩烘湰绫诲瀷锛屽惁鍒欐墍鏈夊煙鐨勫畾涔夊簲鏄 private 銆傚浜庝竴涓被涓煙鐨勭洿鎺ヨ闂繚鍙嶄簡 OO 璁捐鐨勪袱涓熀鏈鍒欙細鎶借薄鍜屽皝瑁呫備粠绾跨▼鐨勮鐐规潵鐪嬶紝鍏佽鐩存帴璁块棶鍩熷彧浣垮瀹冭繘琛岄潪鍚屾璁块棶鏇村鏄撲竴浜涖 澧炲姞$property 鍏抽敭瀛椼傚甫鏈夋鍏抽敭瀛楃殑瀵硅薄鍙涓涓渂ean 鐩掆濆簲鐢ㄧ▼搴忚闂紝杩欎釜绋嬪簭浣跨敤鍦 Class 绫讳腑瀹氫箟鐨勫弽灏勬搷浣(introspection) API锛屽惁鍒欎笌 private private 鍚屾晥銆 $property 灞炴у彲鐢ㄥ湪鍩熷拰鏂规硶锛岃繖鏍风幇鏈夌殑 JavaBean getter/setter 鏂规硶鍙互寰堝鏄撳湴琚畾涔変负灞炴с 涓嶅彉鎬(immutability) 鐢变簬瀵逛笉鍙樺璞$殑璁块棶涓嶉渶瑕佸悓姝ワ紝鎵浠ュ湪澶氱嚎绋嬫潯浠朵笅锛屼笉鍙樼殑姒傚康锛堜竴涓璞$殑鍊煎湪鍒涘缓鍚庝笉鍙洿鏀癸級鏄棤浠风殑銆侸ava 缂栫▼瑷璇腑锛屽浜庝笉鍙樻х殑瀹炵幇涓嶅涓ユ牸锛屾湁涓や釜鍘熷洜锛氬浜庝竴涓笉鍙樺璞★紝鍦ㄥ叾琚湭瀹屽叏鍒涘缓涔嬪墠锛屽彲浠ュ瀹冭繘琛岃闂傝繖绉嶈闂浜庢煇浜涘煙鍙互浜х敓涓嶆纭殑 鍊笺 瀵逛簬鎭掑畾 (绫荤殑鎵鏈夊煙閮芥槸 final) 鐨勫畾涔夊お鏉炬暎銆傚浜庣敱 final 寮曠敤鎸囧畾鐨勫璞★紝铏界劧寮曠敤鏈韩涓嶈兘鏀瑰彉锛屼絾鏄璞℃湰韬彲浠ユ敼鍙樼姸鎬併 绗竴涓棶棰樺彲浠ヨВ鍐筹紝涓嶅厑璁哥嚎绋嬪湪鏋勯犲嚱鏁颁腑寮濮嬫墽琛 (鎴栬呭湪鏋勯犲嚱鏁拌繑鍥炰箣鍓嶄笉鑳芥墽琛屽紑濮嬭姹)銆 瀵逛簬绗簩涓棶棰橈紝閫氳繃闄愬畾final 淇グ绗︽寚鍚戞亽瀹氬璞★紝鍙互瑙e喅姝ら棶棰樸傝繖灏辨槸璇达紝瀵逛簬涓涓璞★紝鍙湁鎵鏈夌殑鍩熸槸 final锛屽苟涓旀墍鏈夊紩鐢ㄧ殑瀵硅薄鐨勫煙涔熼兘鏄 final锛屾瀵硅薄鎵嶇湡姝f槸鎭掑畾鐨勩備负浜嗕笉鎵撶牬鐜版湁浠g爜锛岃繖涓畾涔夊彲浠ヤ娇鐢ㄧ紪璇戝櫒鍔犲己锛屽嵆鍙湁涓涓被琚樉寮忔爣涓轰笉鍙樻椂锛屾绫绘墠鏄笉鍙樼被銆傛柟娉曞涓嬶細 鏈変簡$immutable 淇グ绗﹀悗锛屽湪鍩熷畾涔変腑鐨 final 淇グ绗︽槸鍙夌殑銆 鏈鍚庯紝褰撲娇鐢ㄥ唴閮ㄧ被(inner class)鍚庯紝鍦 Java 缂栬瘧鍣ㄤ腑鐨勪竴涓敊璇娇瀹冩棤娉曞彲闈犲湴鍒涘缓涓嶅彉瀵硅薄銆傚綋涓涓被鏈夐噸瑕佺殑鍐呴儴绫绘椂(鎴戠殑浠g爜甯告湁)锛岀紪璇戝櫒缁忓父涓嶆纭湴鏄剧ず涓嬪垪閿欒淇℃伅锛 鏃娇绌虹殑 final 鍦ㄦ瘡涓瀯閫犲嚱鏁颁腑閮芥湁鍒濆鍖栵紝杩樻槸浼氬嚭鐜拌繖涓敊璇俊鎭傝嚜浠庡湪 1.1 鐗堟湰涓紩鍏ュ唴閮ㄧ被鍚庯紝缂栬瘧鍣ㄤ腑涓鐩存湁杩欎釜閿欒銆傚湪姝ょ増鏈腑锛堜笁骞翠互鍚庯級锛岃繖涓敊璇緷鐒跺瓨鍦ㄣ傜幇鍦紝璇ユ槸鏀规杩欎釜閿欒鐨勬椂鍊欎簡銆 瀵逛簬绫荤骇鍩熺殑瀹炰緥绾ц闂 闄や簡璁块棶鏉冮檺澶栵紝杩樻湁涓涓棶棰橈紝鍗崇被绾э紙闈欐侊級鏂规硶鍜屽疄渚嬶紙闈為潤鎬侊級鏂规硶閮借兘鐩存帴璁块棶绫荤骇锛堥潤鎬侊級鍩熴傝繖绉嶈闂槸闈炲父鍗遍櫓鐨勶紝鍥犱负瀹炰緥鏂规硶鐨勫悓姝ヤ笉浼氳幏鍙 绫荤骇鐨勯攣锛屾墍浠ヤ竴涓猻ynchronized static 鏂规硶鍜屼竴涓 synchronized 鏂规硶杩樻槸鑳藉悓鏃惰闂被鐨勫煙銆傛敼姝f闂鐨勪竴涓槑鏄剧殑鏂规硶鏄紝瑕佹眰鍦ㄥ疄渚嬫柟娉曚腑鍙湁浣跨敤 static 璁块棶鏂规硶鎵嶈兘璁块棶闈炰笉鍙樼被鐨 static 鍩熴傚綋鐒讹紝杩欑瑕佹眰闇瑕佺紪璇戝櫒鍜岃繍琛屾椂闂存鏌ャ傚湪杩欑瑙勫畾涓嬶紝涓嬮潰鐨勪唬鐮佹槸闈炴硶鐨勶細 鐢变簬f() 鍜 g() 鍙互骞惰杩愯锛屾墍浠ュ畠浠兘鍚屾椂鏀瑰彉 x 鐨勫硷紙浜х敓涓嶅畾鐨勭粨鏋滐級銆傝璁颁綇锛岃繖閲屾湁涓や釜閿侊細 static 鏂规硶瑕佹眰灞炰簬 Class 瀵硅薄鐨勯攣锛岃岄潪闈欐佹柟娉曡姹傚睘浜庢绫诲疄渚嬬殑閿併傚綋浠庡疄渚嬫柟娉曚腑璁块棶闈炰笉鍙 static 鍩熸椂锛岀紪璇戝櫒搴旇姹傛弧瓒充笅闈袱涓粨鏋勪腑鐨勪换鎰忎竴涓細 鎴栧垯锛岀紪璇戝櫒搴旇幏寰楄/鍐欓攣鐨勪娇鐢細 鍙﹀涓绉嶆柟娉曟槸锛堣繖涔熸槸涓绉嶇悊鎯崇殑 鏂规硶锛-- 缂栬瘧鍣ㄥ簲 鑷姩 浣跨敤涓涓/鍐欓攣鏉ュ悓姝ヨ闂潪涓嶅彉 static 鍩燂紝杩欐牱锛岀▼搴忓憳灏变笉蹇呮媴蹇冭繖涓棶棰樸 鍚庡彴绾跨▼鐨勭獊鐒剁粨鏉 褰撴墍鏈夌殑闈炲悗鍙扮嚎绋嬬粓姝㈠悗锛屽悗鍙扮嚎绋嬮兘琚獊鐒剁粨鏉熴傚綋鍚庡彴绾跨▼鍒涘缓浜嗕竴浜涘叏灞璧勬簮锛堜緥濡備竴涓暟鎹簱杩炴帴鎴栦竴涓复鏃舵枃浠讹級锛岃屽悗鍙扮嚎绋嬬粨鏉熸椂杩欎簺璧勬簮娌℃湁琚 鍏抽棴鎴栧垹闄ゅ氨浼氬鑷撮棶棰樸 瀵逛簬杩欎釜闂锛屾垜寤鸿鍒跺畾瑙勫垯锛屼娇 Java 铏氭嫙鏈哄湪涓嬪垪鎯呭喌涓嬩笉鍏抽棴搴旂敤绋嬪簭锛氭湁浠讳綍闈炲悗鍙扮嚎绋嬫鍦ㄨ繍琛岋紝鎴栬咃細 鏈変换浣曞悗鍙扮嚎绋嬫鍦ㄦ墽琛屼竴涓 synchronized 鏂规硶鎴 synchronized 浠g爜鍧椼 鍚庡彴绾跨▼鍦ㄥ畠鎵ц瀹宻ynchronized 鍧楁垨 synchronized 鏂规硶鍚庡彲琚珛鍗冲叧闂 閲嶆柊寮曞叆stop() 銆 suspend() 鍜 resume() 鍏抽敭瀛 鐢变簬瀹炵敤鍘熷洜杩欎篃璁镐笉鍙锛屼絾鏄垜甯屾湜涓嶈搴熼櫎stop() (鍦 Thread 鍜 ThreadGroup 涓)銆備絾鏄紝鎴戜細鏀瑰彉 stop() 鐨勮涔夛紝浣垮緱璋冪敤瀹冩椂涓嶄細鐮村潖宸叉湁浠g爜銆備絾鏄紝鍏充簬 stop() 鐨勯棶棰橈紝璇疯浣忥紝褰撶嚎绋嬬粓姝㈠悗锛 stop() 灏嗛噴鏀炬墍鏈夐攣锛岃繖鏍峰彲鑳芥綔鍦ㄥ湴浣挎鍦ㄦ瀵硅薄涓婂伐浣滅殑绾跨▼杩涘叆涓绉嶄笉绋冲畾锛堝眬閮ㄤ慨鏀癸級鐨勭姸鎬併傜敱浜庡仠姝㈢殑绾跨▼宸查噴鏀惧畠鍦ㄦ瀵硅薄涓婄殑鎵鏈夐攣锛屾墍浠ヨ繖浜涘璞℃棤娉 鍐嶈璁块棶銆 瀵逛簬杩欎釜闂锛屽彲浠ラ噸鏂板畾涔塻top() 鐨勮涓猴紝浣跨嚎绋嬪彧鏈夊湪涓嶅崰鏈変换浣曢攣鏃舵墠绔嬪嵆缁堟銆傚鏋滃畠鍗犳嵁鐫閿侊紝鎴戝缓璁湪姝ょ嚎绋嬮噴鏀炬渶鍚庝竴涓攣鍚庢墠缁堟瀹冦傚彲浠ヤ娇鐢ㄤ竴涓拰鎶涘嚭寮傚父鐩镐技鐨勬満鍒舵潵瀹炵幇姝よ 涓恒傝鍋滄绾跨▼搴旇缃竴涓爣蹇楋紝骞朵笖褰撻鍑烘墍鏈夊悓姝ュ潡鏃剁珛鍗虫祴璇曟鏍囧織銆傚鏋滆缃簡姝ゆ爣蹇楋紝灏辨姏鍑轰竴涓殣寮忕殑寮傚父锛屼絾鏄寮傚父搴斾笉鍐嶈兘琚崟鎹夊苟涓斿綋绾跨▼缁 鏉熸椂涓嶄細浜х敓浠讳綍杈撳嚭銆傛敞鎰忥紝寰蒋鐨 NT 鎿嶄綔绯荤粺涓嶈兘寰堝ソ鍦板鐞嗕竴涓閮ㄦ寚绀虹殑绐佺劧鍋滄(abrupt)銆傦紙瀹冧笉鎶 stop 娑堟伅閫氱煡鍔ㄦ佽繛鎺ュ簱锛屾墍浠ュ彲鑳藉鑷寸郴缁熺骇鐨勮祫婧愭紡娲炪傦級杩欏氨鏄垜寤鸿浣跨敤绫讳技寮傚父鐨勬柟娉曠畝鍗曞湴瀵艰嚧 run() 杩斿洖鐨勫師鍥犮 涓庤繖绉嶅拰寮傚父绫讳技鐨勫鐞嗘柟娉曞甫鏉ョ殑瀹為檯闂鏄紝浣犲繀闇鍦ㄦ瘡涓猻ynchronized 鍧楀悗閮芥彃鍏ヤ唬鐮佹潵娴嬭瘯鈥渟topped鈥濇爣蹇椼傚苟涓旇繖绉嶉檮鍔犵殑浠g爜浼氶檷浣庣郴缁熸ц兘骞跺鍔犱唬鐮侀暱搴︺傛垜鎯冲埌鐨勫彟澶栦竴涓姙娉曟槸浣 stop() 瀹炵幇涓涓滃欢杩熺殑(lazy)鈥濆仠姝紝鍦ㄨ繖绉嶆儏鍐典笅锛屽湪涓嬫璋冪敤 wait() 鎴 yield() 鏃舵墠缁堟銆傛垜杩樻兂鍚 Thread 涓姞鍏ヤ竴涓 isStopped() 鍜 stopped() 鏂规硶锛堟鏃讹紝 Thread 灏嗗儚 isInterrupted() 鍜 interrupted() 涓鏍峰伐浣滐紝浣嗘槸浼氭娴 鈥渟top-requested鈥濈殑鐘舵)銆傝繖绉嶆柟娉曚笉鍚戠涓绉嶉偅鏍烽氱敤锛屼絾鏄彲琛屽苟涓斾笉浼氫骇鐢熻繃杞姐 搴旀妸suspend() 鍜 resume() 鏂规硶鏀惧洖鍒 Java 缂栫▼璇█涓紝瀹冧滑鏄緢鏈夌敤鐨勶紝鎴戜笉鎯宠褰撴垚鏄辜鍎垮洯鐨勫皬瀛┿傜敱浜庡畠浠彲鑳戒骇鐢熸綔鍦ㄧ殑鍗遍櫓锛堝綋琚寕璧锋椂锛屼竴涓嚎绋嬪彲浠ュ崰鎹竴涓攣锛夎屽幓鎺夊畠浠槸娌℃湁閬撶悊鐨勩 璇疯鎴戣嚜宸辨潵鍐冲畾鏄惁浣跨敤瀹冧滑銆傚鏋滄帴鏀剁殑绾跨▼姝e崰鎹潃閿侊紝Sun 鍏徃搴旇鎶婂畠浠綔涓鸿皟鐢 suspend() 鐨勪竴涓繍琛屾椂闂村紓甯稿鐞(run-time exception)锛涙垨鑰呮洿濂界殑鏂规硶鏄紝寤惰繜瀹為檯鐨勬寕璧疯繃绋嬶紝鐩村埌绾跨▼閲婃斁鎵鏈夌殑閿併 琚樆鏂殑 I/O 搴旀纭伐浣 搴旇鑳芥墦鏂换浣曡闃绘柇鐨勬搷浣滐紝鑰屼笉鏄彧璁╁畠浠瑆ait() 鍜 sleep() 銆傛垜鍦ㄢ Taming Java Threads 鈥濈殑绗簩绔犱腑鐨 socket 閮ㄥ垎璁ㄨ浜嗘闂銆備絾鏄幇鍦紝瀵逛簬涓涓闃绘柇鐨 socket 涓婄殑 I/O 鎿嶄綔锛屾墦鏂畠鐨勫敮涓鍔炴硶鏄叧闂繖涓 socket锛岃屾病鏈夊姙娉曟墦鏂竴涓闃绘柇鐨勬枃浠 I/O 鎿嶄綔銆備緥濡傦紝涓鏃﹀紑濮嬩竴涓璇锋眰骞朵笖杩涘叆闃绘柇鐘舵佸悗锛岄櫎闈炲埌瀹冨疄闄呰鍑轰竴浜涗笢瑗匡紝鍚﹀垯绾跨▼涓鐩村嚭浜庨樆鏂姸鎬併傛棦浣垮叧鎺夋枃浠跺彞鏌勪篃涓嶈兘鎵撴柇璇绘搷浣溿 杩樻湁锛岀▼搴忓簲鏀寔 I/O 鎿嶄綔鐨勮秴鏃躲傛墍鏈夊彲鑳藉嚭鐜伴樆鏂搷浣滅殑瀵硅薄锛堜緥濡 InputStream 瀵硅薄锛変篃閮藉簲鏀寔杩欑鏂规硶锛 杩欏拰 Socket 绫荤殑setSoTimeout(time) 鏂规硶鏄瓑浠风殑銆傚悓鏍峰湴锛屽簲璇ユ敮鎸佹妸瓒呮椂浣滀负鍙傛暟浼犻掑埌闃绘柇鐨勮皟鐢ㄣ ThreadGroup绫 ThreadGroup搴旇瀹炵幇 Thread 涓兘澶熸敼鍙樼嚎绋嬬姸鎬佺殑鎵鏈夋柟娉曘傛垜鐗瑰埆鎯宠瀹冨疄鐜 join() 鏂规硶锛岃繖鏍锋垜灏卞彲绛夊緟缁勪腑鐨勬墍鏈夌嚎绋嬬殑缁堟銆 鎬荤粨 浠ヤ笂鏄垜鐨勫缓璁傚氨鍍忔垜鍦ㄦ爣棰樹腑鎵璇寸殑閭f牱锛屽鏋滄垜鏄浗鐜...锛堝搸锛夈傛垜甯屾湜杩欎簺鏀瑰彉锛堟垨鍏跺畠绛夊悓鐨勬柟娉曪級鏈缁堣兘琚紩鍏 Java 璇█涓傛垜纭疄璁や负 Java 璇█鏄竴绉嶄紵澶х殑缂栫▼璇█锛涗絾鏄垜涔熻涓 Java 鐨勭嚎绋嬫ā鍨嬭璁″緱杩樹笉澶熷畬鍠勶紝杩欐槸涓浠跺緢鍙儨鐨勪簨鎯呫備絾鏄紝Java 缂栫▼璇█姝e湪婕斿彉锛屾墍浠ヨ繕鏈夊彲鎻愰珮鐨勫墠鏅 鍙傝冭祫鏂欐湰鏂囨槸瀵 Taming Java Threads 鐨勬洿鏂版憳缂栥傝涔︽帰璁ㄤ簡鍦 Java 璇█涓绾跨▼缂栫▼鐨勯櫡闃卞拰闂锛屽苟鎻愪緵浜嗕竴涓笌绾跨▼鐩稿叧鐨 Java 绋嬪簭鍖呮潵瑙e喅杩欎簺闂銆 椹噷鍏板ぇ瀛︾殑 Bill Pugh 姝e湪鑷村姏淇敼 JLS 鏉ユ彁楂樺叾绾跨▼妯″瀷銆侭ill 鐨勬彁璁苟涓嶅鏈枃鎵鎺ㄨ崘鐨勯偅涔堝箍锛屼粬涓昏鑷村姏浜庤鐜版湁鐨勭嚎绋嬫ā鍨嬩互鏇翠负鍚堢悊鏂瑰紡杩愯銆傛洿澶氫俊鎭彲浠 www.cs.umd.edu/~pugh/java/memoryModel/ 鑾峰緱銆 浠 Sun 缃戠珯 鍙壘鍒板叏閮 Java 璇█鐨勮鑼冦 瑕佷粠涓涓函鎶鏈搴︽潵瀹¤绾跨▼锛屽弬闃 Doug Lea 缂栬憲鐨 Concurrent Programming in Java: Design Principles and Patterns 绗簩鐗 銆傝繖鏄湰寰堟鐨勪功锛屼絾鏄畠鐨勯鏍兼槸闈炲父瀛︽湳鍖栫殑骞朵笉涓瀹氶傚悎鎵鏈夌殑璇昏呫傚銆 Taming Java Threads 銆嬫槸涓緢濂界殑琛ュ厖璇荤墿銆 鐢 Scott Oaks 鍜 Henry Wong 缂栧啓鐨 Java Threads 姣 Taming Java Threads 瑕佽交閲忎簺锛屼絾鏄鏋滄偍浠庢湭缂栧啓杩囩嚎绋嬬▼搴忚繖鏈功鏇翠负閫傚悎銆侽aks 鍜 Wong 鍚屾牱瀹炵幇浜 Holub 鎻愪緵鐨勫府鍔╃被锛岃屼笖鐪嬬湅瀵瑰悓涓闂鐨勪笉鍚岃В鍐虫柟妗堟绘槸鏈夌泭鐨勩 鐢 Bill Lewis 鍜 Daniel J. Berg銆缂栧啓鐨 Threads Primer: A Guide to Multithreaded Programming 鏄绾跨▼(涓嶉檺浜 Java)鐨勫緢濂藉叆闂ㄤ粙缁嶃 Java 绾跨▼鐨勪竴浜涙妧鏈俊鎭彲鍦 Sun 缃戠珯 涓婃壘鍒般 鍦 "Multiprocessor Safety and Java" 涓 Paul Jakubik 璁ㄨ浜嗗绾跨▼绯荤粺鐨 SMP 闂銆
TAG: Java java 绾跨▼ 缂洪櫡
鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆