锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏈夌殑鏂囩珷鏀誨嚮ASSERT錛堢偣榪欓噷錛夛紝鏄販娣嗕簡鍏朵嬌鐢ㄧ洰鐨勭殑緇撴灉銆?nbsp; 闃呰鍏ㄦ枃
]]>
]]>
]]>
1銆佽皝鍒涘緩綰跨▼錛?
銆銆鍗充嬌鎮ㄤ粠鏈樉寮忓湴鍒涘緩涓涓柊綰跨▼錛屾偍浠嶅彲鑳戒細鍙戠幇鑷繁鍦ㄤ嬌鐢ㄧ嚎紼嬨傜嚎紼嬭浠庡悇縐嶆潵婧愪腑寮曞叆鍒版垜浠殑紼嬪簭涓?
銆銆鏈夎澶氬伐鍏峰彲浠ヤ負鎮ㄥ垱寤虹嚎紼嬶紝濡傛灉瑕佷嬌鐢ㄨ繖浜涘伐鍏鳳紝搴旇浜嗚В綰跨▼濡備綍浜や簰錛屼互鍙婂浣曢槻姝㈢嚎紼嬩簰鐩稿共鎵般?
銆銆2銆丄WT 鍜?Swing
銆銆浠諱綍浣跨敤 AWT 鎴?Swing 鐨勭▼搴忛兘蹇呴』澶勭悊綰跨▼銆侫WT 宸ュ叿綆卞垱寤哄崟涓嚎紼嬶紝鐢ㄤ簬澶勭悊 UI 浜嬩歡錛屼換浣曠敱 AWT 浜嬩歡璋冪敤鐨勪簨浠朵睛鍚櫒閮藉湪 AWT 浜嬩歡綰跨▼涓墽琛屻?
銆銆鎮ㄤ笉浠呭繀欏誨叧蹇冨悓姝ュ浜嬩歡渚﹀惉鍣ㄥ拰鍏跺畠綰跨▼涔嬮棿鍏變韓鐨勬暟鎹」鐨勮闂紝鑰屼笖榪樺繀欏繪壘鍒頒竴縐嶆柟娉曪紝璁╃敱浜嬩歡渚﹀惉鍣ㄨЕ鍙戠殑闀挎椂闂磋繍琛屼換鍔★紙濡傚湪澶ф枃妗d腑媯鏌ユ嫾鍐欐垨鍦ㄦ枃浠剁郴緇熶腑鎼滅儲涓涓枃浠訛級 鍦ㄥ悗鍙扮嚎紼嬩腑榪愯錛岃繖鏍峰綋璇ヤ換鍔¤繍琛屾椂錛孶I 灝變笉浼氬仠婊炰簡錛堣繖鍙兘榪樹細闃繪鐢ㄦ埛鍙栨秷鎿嶄綔錛夈傝繖鏍峰仛鐨勪竴涓ソ鐨勬鏋剁ず渚嬫槸 SwingWorker 綾?br>銆銆AWT 浜嬩歡綰跨▼騫朵笉鏄畧鎶ょ▼搴忕嚎紼嬶紱榪欏氨鏄氬父浣跨敤 System.exit() 緇撴潫 AWT 鍜?Swing 搴旂敤紼嬪簭鐨勫師鍥犮?
銆銆3銆佷嬌鐢?TimerTask
銆銆JDK 1.3 涓紝TimerTask 宸ュ叿琚紩鍏ュ埌 Java 璇█銆傝繖涓究鍒╃殑宸ュ叿璁╂偍鍙互紼嶅悗鍦ㄦ煇涓椂闂存墽琛屼換鍔★紙渚嬪錛屽嵆浠庣幇鍦ㄨ搗鍗佺鍚庤繍琛屼竴嬈′換鍔★級錛屾垨鑰呭畾鏈熸墽琛屼換鍔★紙鍗籌紝姣忛殧鍗佺榪愯浠誨姟錛夈?
銆銆瀹炵幇 Timer 綾婚潪甯哥畝鍗曪細瀹冨垱寤轟竴涓鏃跺櫒綰跨▼錛屽茍涓旀瀯寤轟竴涓寜鎵ц鏃墮棿鎺掑簭鐨勭瓑寰呬簨浠墮槦鍒椼?
銆銆TimerTask 綰跨▼琚爣璁版垚瀹堟姢紼嬪簭綰跨▼錛岃繖鏍峰畠灝變笉浼氶樆姝㈢▼搴忛鍑恒?
銆銆鍥犱負璁℃椂鍣ㄤ簨浠舵槸鍦ㄨ鏃跺櫒綰跨▼涓墽琛岋紝鎵浠ュ繀欏葷‘淇濇紜悓姝ヤ簡閽堝璁℃椂鍣ㄤ換鍔′腑浣跨敤鐨勪換浣曟暟鎹」鐨勮闂?
銆銆鍦?CalculatePrimes 紺轟緥涓紝騫舵病鏈夎涓葷嚎紼嬩紤鐪狅紝鎴戜滑鍙互浣跨敤 TimerTask錛屾柟娉曞涓嬶細
銆銆 public static void main(String[] args) {
銆銆 Timer timer = new Timer();
銆銆 final CalculatePrimes calculator = new CalculatePrimes();
銆銆 calculator.start();
銆銆 timer.schedule(
銆銆 new TimerTask() {
銆銆 public void run()
銆銆 {
銆銆 calculator.finished = true;
銆銆 }
銆銆 }, TEN_SECONDS);
銆銆 }
銆銆4銆乻ervlet 鍜?JavaServer Pages 鎶鏈?
銆銆servlet 瀹瑰櫒鍒涘緩澶氫釜綰跨▼錛屽湪榪欎簺綰跨▼涓墽琛?servlet 璇鋒眰銆備綔涓?servlet 緙栧啓鑰咃紝鎮ㄤ笉鐭ラ亾錛堜篃涓嶅簲璇ョ煡閬擄級鎮ㄧ殑璇鋒眰浼氬湪浠涔堢嚎紼嬩腑鎵ц錛涘鏋滃悓鏃舵湁澶氫釜瀵圭浉鍚?URL 鐨勮姹傚叆绔欙紝閭d箞鍚屼竴涓?servlet 鍙兘浼氬悓鏃跺湪澶氫釜綰跨▼涓槸媧誨姩鐨勩?
銆銆褰撶紪鍐?servlet 鎴?JavaServer Pages (JSP) 鏂囦歡鏃訛紝蹇呴』濮嬬粓鍋囪鍙互鍦ㄥ涓嚎紼嬩腑騫跺彂鍦版墽琛屽悓涓涓?servlet 鎴?JSP 鏂囦歡銆傚繀欏婚傚綋鍚屾 servlet 鎴?JSP 鏂囦歡璁塊棶鐨勪換浣曞叡浜暟鎹紱榪欏寘鎷?servlet 瀵硅薄鏈韓鐨勫瓧孌點?
銆銆5銆佸疄鐜?RMI 瀵硅薄
銆銆RMI 宸ュ叿鍙互璁╂偍璋冪敤瀵瑰湪鍏跺畠 JVM 涓繍琛岀殑瀵硅薄榪涜鐨勬搷浣溿傚綋璋冪敤榪滅▼鏂規硶鏃訛紝RMI 緙栬瘧鍣ㄥ垱寤虹殑 RMI 瀛樻牴浼氭墦鍖呮柟娉曞弬鏁幫紝騫墮氳繃緗戠粶灝嗗畠浠彂閫佸埌榪滅▼緋葷粺錛岀劧鍚庤繙紼嬬郴緇熶細灝嗗畠浠В鍖呭茍璋冪敤榪滅▼鏂規硶銆?
銆銆鍋囪鎮ㄥ垱寤轟簡涓涓?RMI 瀵硅薄錛屽茍灝嗗畠娉ㄥ唽鍒?RMI 娉ㄥ唽琛ㄦ垨鑰?Java 鍛藉悕鍜岀洰褰曟帴鍙o紙Java Naming and Directory Interface (JNDI)錛夊悕縐扮┖闂淬傚綋榪滅▼瀹㈡埛鏈鴻皟鐢ㄥ叾涓殑涓涓柟娉曟椂錛岃鏂規硶浼氬湪浠涔堢嚎紼嬩腑鎵ц鍛紵
銆銆瀹炵幇 RMI 瀵硅薄鐨勫父鐢ㄦ柟娉曟槸緇ф壙 UnicastRemoteObject銆傚湪鏋勯?UnicastRemoteObject 鏃訛紝浼氬垵濮嬪寲鐢ㄤ簬鍒嗘淳榪滅▼鏂規硶璋冪敤鐨勫熀紜緇撴瀯銆傝繖鍖呮嫭鐢ㄤ簬鎺ユ敹榪滅▼璋冪敤璇鋒眰鐨勫鎺ュ瓧渚﹀惉鍣紝鍜屼竴涓垨澶氫釜鎵ц榪滅▼璇鋒眰鐨勭嚎紼嬨?
銆銆鎵浠ワ紝褰撴帴鏀跺埌鎵ц RMI 鏂規硶鐨勮姹傛椂錛岃繖浜涙柟娉曞皢鍦?RMI 綆$悊鐨勭嚎紼嬩腑鎵ц銆?
銆銆6銆佸皬緇?
銆銆綰跨▼閫氳繃鍑犵鏈哄埗榪涘叆 Java 紼嬪簭銆傞櫎浜嗙敤 Thread 鏋勯犲櫒涓樉寮忓垱寤虹嚎紼嬩箣澶栵紝榪樺彲浠ョ敤璁稿鍏跺畠鏈哄埗鍒涘緩綰跨▼錛?br>銆銆AWT 鍜?Swing
銆銆RMI
銆銆java.util.TimerTask 宸ュ叿
銆銆servlet 鍜?JSP 鎶鏈?
鍏變韓鍙橀噺
1銆?鍏變韓鍙橀噺
銆銆瑕佷嬌澶氫釜綰跨▼鍦ㄤ竴涓▼搴忎腑鏈夌敤錛屽畠浠繀欏繪湁鏌愮鏂規硶鍙互浜掔浉閫氫俊鎴栧叡浜畠浠殑緇撴灉銆?
銆銆璁╃嚎紼嬪叡浜叾緇撴灉鐨勬渶綆鍗曟柟娉曟槸浣跨敤鍏變韓鍙橀噺銆傚畠浠繕搴旇浣跨敤鍚屾鏉ョ‘淇濆間粠涓涓嚎紼嬫紜紶鎾埌鍙︿竴涓嚎紼嬶紝浠ュ強闃叉褰撲竴涓嚎紼嬫鍦ㄦ洿鏂頒竴浜涚浉鍏蟲暟鎹」鏃訛紝鍙︿竴涓嚎紼嬬湅鍒頒笉涓鑷寸殑涓棿緇撴灉銆?
銆銆綰跨▼鍩虹涓綆楃礌鏁扮殑紺轟緥浣跨敤浜嗕竴涓叡浜竷灝斿彉閲忥紝鐢ㄤ簬琛ㄧず鎸囧畾鐨勬椂闂存宸茬粡榪囧幓浜嗐傝繖璇存槑浜嗗湪綰跨▼闂村叡浜暟鎹渶綆鍗曠殑褰㈠紡鏄細杞鍏變韓鍙橀噺浠ユ煡鐪嬪彟涓涓嚎紼嬫槸鍚﹀凡緇忓畬鎴愭墽琛屾煇欏逛換鍔°?
銆銆2銆佸瓨鍦ㄤ簬鍚屼竴涓唴瀛樼┖闂翠腑鐨勬墍鏈夌嚎紼?
銆銆姝e鍓嶉潰璁ㄨ榪囩殑錛岀嚎紼嬩笌榪涚▼鏈夎澶氬叡鍚岀偣錛屼笉鍚岀殑鏄嚎紼嬩笌鍚屼竴榪涚▼涓殑鍏跺畠綰跨▼鍏變韓鐩稿悓鐨勮繘紼嬩笂涓嬫枃錛屽寘鎷唴瀛樸傝繖闈炲父渚垮埄錛屼絾涔熸湁閲嶅ぇ璐d換銆傚彧瑕佽闂叡浜彉閲忥紙闈欐佹垨瀹炰緥瀛楁錛夛紝綰跨▼灝卞彲浠ユ柟渚垮湴浜掔浉浜ゆ崲鏁版嵁錛屼絾綰跨▼榪樺繀欏葷‘淇濆畠浠互鍙楁帶鐨勬柟寮忚闂叡浜彉閲忥紝浠ュ厤瀹冧滑浜掔浉騫叉壈瀵規柟鐨勬洿鏀廣?
銆銆浠諱綍綰跨▼鍙互璁塊棶鎵鏈夊叾浣滅敤鍩熷唴鐨勫彉閲忥紝灝辮薄涓葷嚎紼嬪彲浠ヨ闂鍙橀噺涓鏍楓傜礌鏁扮ず渚嬩嬌鐢ㄤ簡涓涓叕鐢ㄥ疄渚嬪瓧孌碉紝鍙仛 finished錛岀敤浜庤〃紺哄凡緇忚繃浜嗘寚瀹氱殑鏃墮棿銆傚綋璁℃椂鍣ㄨ繃鏈熸椂錛屼竴涓嚎紼嬩細鍐欒繖涓瓧孌碉紱鍙︿竴涓嚎紼嬩細瀹氭湡璇誨彇榪欎釜瀛楁錛屼互媯鏌ュ畠鏄惁搴旇鍋滄銆傛敞錛氳繖涓瓧孌佃澹版槑鎴?volatile錛岃繖瀵逛簬榪欎釜紼嬪簭鐨勬紜繍琛岄潪甯擱噸瑕併傚湪鏈珷鐨勫悗闈紝鎴戜滑灝嗙湅鍒板師鍥犮?
銆銆3銆佸彈鎺ц闂殑鍚屾
銆銆涓轟簡紜繚鍙互鍦ㄧ嚎紼嬩箣闂翠互鍙楁帶鏂瑰紡鍏變韓鏁版嵁錛孞ava 璇█鎻愪緵浜嗕袱涓叧閿瓧錛歴ynchronized 鍜?volatile銆?
銆銆Synchronized 鏈変袱涓噸瑕佸惈涔夛細瀹冪‘淇濅簡涓嬈″彧鏈変竴涓嚎紼嬪彲浠ユ墽琛屼唬鐮佺殑鍙椾繚鎶ら儴鍒嗭紙浜掓枼錛宮utual exclusion 鎴栬呰 mutex錛夛紝鑰屼笖瀹冪‘淇濅簡涓涓嚎紼嬫洿鏀圭殑鏁版嵁瀵逛簬鍏跺畠綰跨▼鏄彲瑙佺殑錛堟洿鏀圭殑鍙鎬э級銆?
銆銆濡傛灉娌℃湁鍚屾錛屾暟鎹緢瀹規槗灝卞浜庝笉涓鑷寸姸鎬併備緥濡傦紝濡傛灉涓涓嚎紼嬫鍦ㄦ洿鏂頒袱涓浉鍏沖鹼紙姣斿錛岀矑瀛愮殑浣嶇疆鍜岄熺巼錛夛紝鑰屽彟涓涓嚎紼嬫鍦ㄨ鍙栬繖涓や釜鍊鹼紝鏈夊彲鑳藉湪絎竴涓嚎紼嬪彧鍐欎簡涓涓鹼紝榪樻病鏈夊啓鍙︿竴涓肩殑鏃跺欙紝璋冨害絎簩涓嚎紼嬭繍琛岋紝榪欐牱瀹冨氨浼氱湅鍒頒竴涓棫鍊煎拰涓涓柊鍊箋傚悓姝ヨ鎴戜滑鍙互瀹氫箟蹇呴』鍘熷瓙鍦拌繍琛岀殑浠g爜鍧楋紝榪欐牱瀵逛簬鍏朵粬綰跨▼鑰岃█錛屽畠浠涔堥兘鎵ц錛岃涔堥兘涓嶆墽琛屻?
銆銆鍚屾鐨勫師瀛愭墽琛屾垨浜掓枼鏂歸潰綾諱技浜庡叾瀹冩搷浣滅幆澧冧腑鐨勪復鐣屾鐨勬蹇點?
銆銆4銆佺‘淇濆叡浜暟鎹洿鏀圭殑鍙鎬?
銆銆鍚屾鍙互璁╂垜浠‘淇濈嚎紼嬬湅鍒頒竴鑷寸殑鍐呭瓨瑙嗗浘銆?
銆銆澶勭悊鍣ㄥ彲浠ヤ嬌鐢ㄩ珮閫熺紦瀛樺姞閫熷鍐呭瓨鐨勮闂紙鎴栬呯紪璇戝櫒鍙互灝嗗煎瓨鍌ㄥ埌瀵勫瓨鍣ㄤ腑浠ヤ究榪涜鏇村揩鐨勮闂級銆傚湪涓浜涘澶勭悊鍣ㄤ綋緋葷粨鏋勪笂錛屽鏋滃湪涓涓鐞嗗櫒鐨勯珮閫熺紦瀛樹腑淇敼浜嗗唴瀛樹綅緗紝娌℃湁蹇呰璁╁叾瀹冨鐞嗗櫒鐪嬪埌榪欎竴淇敼錛岀洿鍒板埛鏂頒簡鍐欏叆鍣ㄧ殑楂橀熺紦瀛樺茍涓斾嬌璇誨彇鍣ㄧ殑楂橀熺紦瀛樻棤鏁堛?
銆銆榪欒〃紺哄湪榪欐牱鐨勭郴緇熶笂錛屽浜庡悓涓鍙橀噺錛屽湪涓や釜涓嶅悓澶勭悊鍣ㄤ笂鎵ц鐨勪袱涓嚎紼嬪彲鑳戒細鐪嬪埌涓や釜涓嶅悓鐨勫鹼紒榪欏惉璧鋒潵寰堝悡浜猴紝浣嗗畠鍗村緢甯歌銆傚畠鍙槸琛ㄧず鍦ㄨ闂叾瀹冪嚎紼嬩嬌鐢ㄦ垨淇敼鐨勬暟鎹椂錛屽繀欏婚伒寰煇浜涜鍒欍?
銆銆Volatile 姣斿悓姝ユ洿綆鍗曪紝鍙傚悎浜庢帶鍒跺鍩烘湰鍙橀噺錛堟暣鏁般佸竷灝斿彉閲忕瓑錛夌殑鍗曚釜瀹炰緥鐨勮闂傚綋涓涓彉閲忚澹版槑鎴?volatile錛屼換浣曞璇ュ彉閲忕殑鍐欐搷浣滈兘浼氱粫榪囬珮閫熺紦瀛橈紝鐩存帴鍐欏叆涓誨唴瀛橈紝鑰屼換浣曞璇ュ彉閲忕殑璇誨彇涔熼兘緇曡繃楂橀熺紦瀛橈紝鐩存帴鍙栬嚜涓誨唴瀛樸傝繖琛ㄧず鎵鏈夌嚎紼嬪湪浠諱綍鏃跺欑湅鍒扮殑 volatile 鍙橀噺鍊奸兘鐩稿悓銆?
銆銆濡傛灉娌℃湁姝g‘鐨勫悓姝ワ紝綰跨▼鍙兘浼氱湅鍒版棫鐨勫彉閲忓鹼紝鎴栬呭紩璧峰叾瀹冨艦寮忕殑鏁版嵁鎹熷潖銆?
銆銆5銆佺敤閿佷繚鎶ょ殑鍘熷瓙浠g爜鍧?
銆銆Volatile 瀵逛簬紜繚姣忎釜綰跨▼鐪嬪埌鏈鏂扮殑鍙橀噺鍊奸潪甯告湁鐢紝浣嗘湁鏃舵垜浠渶瑕佷繚鎶ゆ瘮杈冨ぇ鐨勪唬鐮佺墖孌碉紝濡傛秹鍙婃洿鏂板涓彉閲忕殑鐗囨銆?
銆銆鍚屾浣跨敤鐩戞帶鍣紙monitor錛夋垨閿佺殑姒傚康錛屼互鍗忚皟瀵圭壒瀹氫唬鐮佸潡鐨勮闂?
銆銆姣忎釜 Java 瀵硅薄閮芥湁涓涓浉鍏崇殑閿併傚悓涓鏃墮棿鍙兘鏈変竴涓嚎紼嬫寔鏈?Java 閿併傚綋綰跨▼榪涘叆 synchronized 浠g爜鍧楁椂錛岀嚎紼嬩細闃誨騫剁瓑寰咃紝鐩村埌閿佸彲鐢紝褰撳畠鍙敤鏃訛紝灝變細鑾峰緱榪欎釜閿侊紝鐒跺悗鎵ц浠g爜鍧椼傚綋鎺у埗閫鍑哄彈淇濇姢鐨勪唬鐮佸潡鏃訛紝鍗沖埌杈句簡浠g爜鍧楁湯灝炬垨鑰呮姏鍑轟簡娌℃湁鍦?synchronized 鍧椾腑鎹曡幏鐨勫紓甯告椂錛屽畠灝變細閲婃斁璇ラ攣銆?
銆銆榪欐牱錛屾瘡嬈″彧鏈変竴涓嚎紼嬪彲浠ユ墽琛屽彈緇欏畾鐩戞帶鍣ㄤ繚鎶ょ殑浠g爜鍧椼備粠鍏跺畠綰跨▼鐨勮搴︾湅錛岃浠g爜鍧楀彲浠ョ湅浣滄槸鍘熷瓙鐨勶紝瀹冭涔堝叏閮ㄦ墽琛岋紝瑕佷箞鏍規湰涓嶆墽琛屻?
銆銆6銆佺畝鍗曠殑鍚屾紺轟緥
銆銆浣跨敤 synchronized 鍧楀彲浠ヨ鎮ㄥ皢涓緇勭浉鍏蟲洿鏂頒綔涓轟竴涓泦鍚堟潵鎵ц錛岃屼笉蹇呮媴蹇冨叾瀹冪嚎紼嬩腑鏂垨鐪嬪埌璁$畻鐨勪腑闂寸粨鏋溿備互涓嬬ず渚嬩唬鐮佸皢鎵撳嵃鈥? 0鈥濇垨鈥? 1鈥濄傚鏋滄病鏈夊悓姝ワ紝瀹冭繕浼氭墦鍗扳? 1鈥濓紙鎴栤? 0鈥濓紝闅忎究鎮ㄤ俊涓嶄俊錛夈?
銆銆public class SyncExample {
銆銆 private static lockObject = new Object();
銆銆 private static class Thread1 extends Thread {
銆銆 public void run() {
銆銆 synchronized (lockObject) {
銆銆 x = y = 0;
銆銆 System.out.println(x);
銆銆 }
銆銆 }
銆銆 }
銆銆 private static class Thread2 extends Thread {
銆銆 public void run() {
銆銆 synchronized (lockObject) {
銆銆 x = y = 1;
銆銆 System.out.println(y);
銆銆 }
銆銆 }
銆銆 }
銆銆 public static void main(String[] args) {
銆銆 new Thread1().run();
銆銆 new Thread2().run();
銆銆 }
銆銆}
銆銆鍦ㄨ繖涓や釜綰跨▼涓兘蹇呴』浣跨敤鍚屾錛屼互渚夸嬌榪欎釜紼嬪簭姝g‘宸ヤ綔銆?
銆銆7銆丣ava 閿佸畾
銆銆Java 閿佸畾鍚堝茍浜嗕竴縐嶄簰鏂ュ艦寮忋傛瘡嬈″彧鏈変竴涓嚎紼嬪彲浠ユ寔鏈夐攣銆傞攣鐢ㄤ簬淇濇姢浠g爜鍧楁垨鏁翠釜鏂規硶錛屽繀欏昏浣忔槸閿佺殑韜喚淇濇姢浜嗕唬鐮佸潡錛岃屼笉鏄唬鐮佸潡鏈韓錛岃繖涓鐐瑰緢閲嶈銆備竴涓攣鍙互淇濇姢璁稿浠g爜鍧楁垨鏂規硶銆?
銆銆鍙嶄箣錛屼粎浠呭洜涓轟唬鐮佸潡鐢遍攣淇濇姢騫朵笉琛ㄧず涓や釜綰跨▼涓嶈兘鍚屾椂鎵ц璇ヤ唬鐮佸潡銆傚畠鍙〃紺哄鏋滀袱涓嚎紼嬫鍦ㄧ瓑寰呯浉鍚岀殑閿侊紝鍒欏畠浠笉鑳藉悓鏃舵墽琛岃浠g爜銆?
銆銆鍦ㄤ互涓嬬ず渚嬩腑錛屼袱涓嚎紼嬪彲浠ュ悓鏃朵笉鍙楅檺鍒跺湴鎵ц setLastAccess() 涓殑 synchronized 鍧楋紝鍥犱負姣忎釜綰跨▼鏈変竴涓笉鍚岀殑 thingie 鍊箋傚洜姝わ紝synchronized 浠g爜鍧楀彈鍒頒袱涓鍦ㄦ墽琛岀殑綰跨▼涓笉鍚岄攣鐨勪繚鎶ゃ?
銆銆public class SyncExample {
銆銆 public static class Thingie {
銆銆 private Date lastAccess;
銆銆 public synchronized void setLastAccess(Date date) {
銆銆 this.lastAccess = date;
銆銆 }
銆銆 }
銆銆 public static class MyThread extends Thread {
銆銆 private Thingie thingie;
銆銆 public MyThread(Thingie thingie) {
銆銆 this.thingie = thingie;
銆銆 }
銆銆 public void run() {
銆銆 thingie.setLastAccess(new Date());
銆銆 }
銆銆 }
銆銆 public static void main() {
銆銆 Thingie thingie1 = new Thingie(),
銆銆 thingie2 = new Thingie();
銆銆 new MyThread(thingie1).start();
銆銆 new MyThread(thingie2).start();
銆銆 }
銆銆}
銆銆8銆佸悓姝ョ殑鏂規硶
銆銆鍒涘緩 synchronized 鍧楃殑鏈綆鍗曟柟娉曟槸灝嗘柟娉曞0鏄庢垚 synchronized銆傝繖琛ㄧず鍦ㄨ繘鍏ユ柟娉曚富浣撲箣鍓嶏紝璋冪敤鑰呭繀欏昏幏寰楅攣錛?
銆銆public class Point {
銆銆 public synchronized void setXY(int x, int y) {
銆銆 this.x = x;
銆銆 this.y = y;
銆銆 }
銆銆}
銆銆瀵逛簬鏅氱殑 synchronized鏂規硶錛岃繖涓攣鏄竴涓璞★紝灝嗛拡瀵瑰畠璋冪敤鏂規硶銆傚浜庨潤鎬?synchronized 鏂規硶錛岃繖涓攣鏄笌 Class 瀵硅薄鐩稿叧鐨勭洃鎺у櫒錛屽湪璇ュ璞′腑澹版槑浜嗘柟娉曘?
銆銆浠呬粎鍥犱負 setXY() 琚0鏄庢垚 synchronized 騫朵笉琛ㄧず涓や釜涓嶅悓鐨勭嚎紼嬩笉鑳藉悓鏃舵墽琛?setXY()錛屽彧瑕佸畠浠皟鐢ㄤ笉鍚岀殑 Point 瀹炰緥鐨?setXY() 灝卞彲鍚屾椂鎵ц銆傚浜庝竴涓?Point 瀹炰緥錛屼竴嬈″彧鑳芥湁涓涓嚎紼嬫墽琛?setXY()錛屾垨 Point 鐨勪換浣曞叾瀹?synchronized 鏂規硶銆?
銆銆9銆佸悓姝ョ殑鍧?
銆銆synchronized 鍧楃殑璇硶姣?synchronized 鏂規硶紼嶅井澶嶆潅涓鐐癸紝鍥犱負榪橀渶瑕佹樉寮忓湴鎸囧畾閿佽淇濇姢鍝釜鍧椼侾oint 鐨勪互涓嬬増鏈瓑浠蜂簬鍓嶄竴欏典腑鏄劇ず鐨勭増鏈細
銆銆public class Point {
銆銆 public void setXY(int x, int y) {
銆銆 synchronized (this) {
銆銆 this.x = x;
銆銆 this.y = y;
銆銆 }
銆銆 }
銆銆}
銆銆浣跨敤 this 寮曠敤浣滀負閿佸緢甯歌錛屼絾榪欏茍涓嶆槸蹇呴渶鐨勩傝繖琛ㄧず璇ヤ唬鐮佸潡灝嗕笌榪欎釜綾諱腑鐨?synchronized 鏂規硶浣跨敤鍚屼竴涓攣銆?
銆銆鐢變簬鍚屾闃叉浜嗗涓嚎紼嬪悓鏃舵墽琛屼竴涓唬鐮佸潡錛屽洜姝ゆц兘涓婂氨鏈夐棶棰橈紝鍗充嬌鏄湪鍗曞鐞嗗櫒緋葷粺涓娿傛渶濂藉湪灝藉彲鑳芥渶灝忕殑闇瑕佷繚鎶ょ殑浠g爜鍧椾笂浣跨敤鍚屾銆?
銆銆璁塊棶灞閮紙鍩轟簬鍫嗘爤鐨勶級鍙橀噺浠庢潵涓嶉渶瑕佸彈鍒頒繚鎶わ紝鍥犱負瀹冧滑鍙兘琚嚜宸辨墍灞炵殑綰跨▼璁塊棶銆?
銆銆10銆佸ぇ澶氭暟綾誨茍娌℃湁鍚屾
銆銆鍥犱負鍚屾浼氬甫鏉ュ皬灝忕殑鎬ц兘鎹熷け錛屽ぇ澶氭暟閫氱敤綾伙紝濡?java.util 涓殑 Collection 綾伙紝涓嶅湪鍐呴儴浣跨敤鍚屾銆傝繖琛ㄧず鍦ㄦ病鏈夐檮鍔犲悓姝ョ殑鎯呭喌涓嬶紝涓嶈兘鍦ㄥ涓嚎紼嬩腑浣跨敤璇稿 HashMap 榪欐牱鐨勭被銆?
鏂囩珷鍦?a >榪欓噷
鍙弬鑰冿細
http://www-900.ibm.com/developerWorks/cn/xml/x-injava/index.shtml
http://www-900.ibm.com/developerWorks/cn/xml/x-injava2/index.shtml
緇撹鏄細DOM4J鏄繖鍦烘祴璇曠殑鑾瘋儨鑰咃紝鐩墠璁稿寮婧愰」鐩腑澶ч噺閲囩敤 DOM4J
鍏跺疄鎴戣涓哄綊鏍圭粨搴曞氨鏄袱縐嶆妧鏈細DOM鍜孲AX
DOM鏄竴嬈℃ф妸XML璇昏繘鍐呭瓨錛屾瀯閫燚ocument瀵硅薄錛岀劧鍚庡彲浠ヤ互浠諱綍瑙勫垯鏉ヨВ鏋愭枃浠訛紝涔熷彲浠ュ仛鍝嶅簲淇敼錛屽鐞嗘瘮杈冪伒媧匯備絾鏄疍OM姣旇緝娑堣楀唴瀛橈紝涓嶈兘澶勭悊澶ぇ鐨勬枃浠躲備富嫻佺殑DOM鏈塉DOM錛孌OM4J錛?br> SAX鏄竴涓簨浠墮┍鍔ㄧ殑瑙f瀽鍣紝鏄愬彞璇繪枃浠訛紝瑙﹀彂浜嬩歡錛屾墽琛屾搷浣溿備絾鏄畠鍙兘瑙f瀽錛屼笉鑳藉XML鏂囦歡淇敼銆?/p>
銆銆涓嬮潰鏄竴浜涘緱鍒癱lasspath鍜屽綋鍓嶇被鐨勭粷瀵硅礬寰勭殑涓浜涙柟娉曘備綘鍙兘闇瑕佷嬌鐢ㄥ叾涓殑涓浜涙柟娉曟潵寰楀埌浣犻渶瑕佺殑璧勬簮鐨勭粷瀵硅礬寰勩?/p>
銆銆1.FileTest.class.getResource("")
銆銆寰楀埌鐨勬槸褰撳墠綾籉ileTest.class鏂囦歡鐨刄RI鐩綍銆備笉鍖呮嫭鑷繁錛?/p>
銆銆濡傦細file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/
銆銆2.FileTest.class.getResource("/")
銆銆寰楀埌鐨勬槸褰撳墠鐨刢lasspath鐨勭粷瀵筓RI璺緞銆?/p>
銆銆濡傦細file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
銆銆3.Thread.currentThread().getContextClassLoader().getResource("")
銆銆寰楀埌鐨勪篃鏄綋鍓岰lassPath鐨勭粷瀵筓RI璺緞銆?/p>
銆銆濡傦細file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
銆銆4.FileTest.class.getClassLoader().getResource("")
銆銆寰楀埌鐨勪篃鏄綋鍓岰lassPath鐨勭粷瀵筓RI璺緞銆?/p>
銆銆濡傦細file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
銆銆5.ClassLoader.getSystemResource("")
銆銆寰楀埌鐨勪篃鏄綋鍓岰lassPath鐨勭粷瀵筓RI璺緞銆?/p>
銆銆濡傦細file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
銆銆鎴戞帹鑽愪嬌鐢═hread.currentThread().getContextClassLoader().getResource("")鏉ュ緱鍒板綋鍓嶇殑classpath鐨勭粷瀵硅礬寰勭殑URI琛ㄧず娉曘?/p>
聽聽聽 鍦╓eb搴旂敤紼嬪簭涓紝鎴戜滑涓鑸氳繃ServletContext.getRealPath("/")鏂規硶寰楀埌Web搴旂敤紼嬪簭鐨勬牴鐩綍鐨勭粷瀵硅礬寰勩傝繖鏍鳳紝鎴戜滑鍙渶瑕佹彁渚涚浉瀵逛簬Web搴旂敤紼嬪簭鏍圭洰褰曠殑璺緞錛屽氨鍙互鏋勫緩鍑哄畾浣嶈祫婧愮殑緇濆璺緞銆?br />聽聽聽
聽聽聽
娉ㄦ剰鐐癸細
聽聽聽 1.灝介噺涓嶈浣跨敤鐩稿浜嶴ystem.getProperty("user.dir")褰撳墠鐢ㄦ埛鐩綍鐨勭浉瀵硅礬寰勩傝繖鏄竴棰楀畾鏃剁偢寮癸紝闅忔椂鍙兘瑕佷綘鐨勫懡銆?/p>
銆銆2.灝介噺浣跨敤URI褰㈠紡聽
鐨勭粷瀵硅礬寰勮祫婧愩傚畠鍙互寰堝鏄撶殑杞彉涓篣RI,URL錛孎ile瀵硅薄銆?/p>
銆銆3.灝介噺浣跨敤鐩稿classpath鐨勭浉瀵硅礬寰勩備笉瑕佷嬌鐢ㄧ粷瀵硅礬寰勩備嬌鐢ㄤ笂闈lassLoaderUtil綾葷殑public static URL getExtendResource(String relativePath)鏂規硶宸茬粡鑳藉浣跨敤鐩稿浜巆lasspath鐨勭浉瀵硅礬寰勫畾浣嶆墍鏈変綅緗殑璧勬簮銆?/p>
銆銆4.緇濆涓嶈浣跨敤紜紪鐮佺殑緇濆璺緞銆傚洜涓猴紝鎴戜滑瀹屽叏鍙互浣跨敤ClassLoader綾葷殑getResource("")鏂規硶寰楀埌褰撳墠classpath鐨勭粷瀵硅礬寰勩?/p>
浣跨敤紜紪鐮佺殑緇濆璺緞鏄畬鍏ㄦ病鏈夊繀瑕佺殑錛佸畠涓瀹氫細璁╀綘姝葷殑寰堥毦鐪嬶紒紼嬪簭灝嗘棤娉曠Щ妞嶏紒
銆銆濡傛灉浣犱竴瀹氳鎸囧畾涓涓粷瀵硅礬寰勶紝閭d箞浣跨敤閰嶇疆鏂囦歡錛屼篃姣旂‖緙栫爜瑕佸ソ寰楀錛?/p>
銆銆褰撶劧錛屾垜榪樻槸鎺ㄨ崘浣犱嬌鐢ㄧ▼搴忓緱鍒癱lasspath鐨勭粷瀵硅礬寰勬潵鎷艱祫婧愮殑緇濆璺緞