张三的并发编程实践:掌握多线程技巧,打造高性能应用!

发布于:2024-10-24 编辑:匿名 来源:网络

绾跨▼鏄搷浣滅郴缁熻兘澶熻繘琛岃绠楄皟搴︾殑鏈?灏忓崟浣嶃?傚畠鍖呭惈鍦ㄦ祦绋嬩腑锛屾槸娴佺▼涓殑瀹為檯鎿嶄綔鍗曞厓銆備竴涓繘绋嬩腑鍙互鏈夊涓嚎绋嬶紝瀹冧滑鍏变韩杩涚▼鐨勮祫婧愶紝濡傚唴瀛樼┖闂淬?佹枃浠跺彞鏌勭瓑銆備笌杩涚▼鐩告瘮锛岀嚎绋嬬殑璧勬簮寮?閿?鏇村皬锛屽彲浠ユ洿蹇湴鍒涘缓鍜屽垏鎹㈢嚎绋嬨?傜嚎绋嬬殑鏁呬簨 鏈変竴澶╋紝涓?浣嶇▼搴忓憳姝e湪寮?鍙戜竴涓渶瑕佸鐞嗗ぇ閲忎换鍔$殑搴旂敤绋嬪簭銆傜▼搴忓憳鍐冲畾浣跨敤澶氱嚎绋嬫潵鎻愰珮绋嬪簭鎵ц鏁堢巼銆備簬鏄紝绋嬪簭鍛樺垱寤轰簡涓?涓嚎绋嬫睜锛岀嚎绋嬫睜涓湁寰堝绾跨▼銆傚綋鏂颁换鍔″埌杈炬椂锛岀嚎绋嬫睜涓殑绌洪棽绾跨▼灏嗚鍒嗛厤璇ヤ换鍔℃潵鎵ц銆傜嚎绋嬪湪鎵ц杩囩▼涓彲鑳戒細閬囧埌涓?浜涢樆濉炴搷浣滐紝姣斿绛夊緟鏂囦欢璇诲啓銆佺瓑寰呯綉缁滆姹傜瓑锛屾鏃剁嚎绋嬩細杩涘叆闃诲鐘舵?侊紝绾跨▼姹犱細鏇挎崲杩欎釜绾跨▼浠ュ厑璁稿叾浠栫嚎绋嬬嚎绋嬬户缁墽琛屼换鍔°?傚綋闃诲鎿嶄綔瀹屾垚鍚庯紝绾跨▼灏嗚繑鍥炵嚎绋嬫睜锛岀瓑寰呮柊浠诲姟鐨勫垎閰嶃?傛煇涓?鏃跺埢锛岀嚎绋嬫睜涓殑绾跨▼閮藉繖浜嗭紝浣嗗簲鐢ㄧ▼搴忎粛鐒舵湁寰堝宸ヤ綔瑕佸仛銆傝繖鏃讹紝绾跨▼姹犲喅瀹氭墿澶у苟娣诲姞鏇村鐨勭嚎绋嬨?傛柊绾跨▼蹇?熸帴绠′换鍔★紝鎻愰珮绋嬪簭鐨勫鐞嗚兘鍔涖?傝繕鏈変竴娆★紝绾跨▼姹犱腑鐨勭嚎绋嬭繃澶氾紝瀵艰嚧绯荤粺璧勬簮绱у紶銆傝繖鏃剁嚎绋嬫睜鍐冲畾鏀剁缉锛屽噺灏戜竴浜涚嚎绋嬨?傚噺灏戠殑绾跨▼鍦ㄥ畬鎴愬綋鍓嶄换鍔″悗浼氳嚜鍔ㄩ??鍑恒?傞?氳繃杩欎釜鏁呬簨锛屾垜浠彲浠ヤ簡瑙g嚎绋嬬殑鍩烘湰姒傚康鍜屼綔鐢ㄣ?傚湪瀹為檯寮?鍙戜腑锛屾垜浠渶瑕佹牴鎹簲鐢ㄧ▼搴忓拰绯荤粺璧勬簮鐨勯渶瑕侊紝鍚堢悊浣跨敤澶氱嚎绋嬫潵鎻愰珮绋嬪簭鐨勬墽琛屾晥鐜囥?傜嚎绋嬬姸鎬?绾跨▼鍦ㄦ墽琛岃繃绋嬩腑浼氱粡鍘嗕笉鍚岀殑鐘舵?侊細 鏂板缓锛圢ew锛夛細褰撲娇鐢╪ew鍏抽敭瀛楀垱寤虹嚎绋嬪璞℃椂锛岀嚎绋嬪氨澶勪簬鏂板缓鐘舵?併?傛鏃讹紝绾跨▼瀵硅薄宸茬粡琚垱寤猴紝浣嗘槸绾跨▼杩樻病鏈夊紑濮嬫墽琛屻?備唬鐮佽瑷?锛歫avascript Copy Thread thread = new Thread();灏辩华锛圧unnable锛夛細褰撶嚎绋嬪璞¤皟鐢╯tart()鏂规硶鏃讹紝绾跨▼杩涘叆鍙繍琛岀姸鎬併?傛鏃讹紝绾跨▼宸插噯澶囧ソ鎵ц锛屾鍦ㄧ瓑寰呯郴缁熷垎閰嶈祫婧愩?備唬鐮佽瑷?锛歫avascript 澶嶅埗thread.start();杩愯涓細褰撶嚎绋嬭幏寰楃郴缁熻祫婧愭椂锛岀嚎绋嬪紑濮嬫墽琛宺un()鏂规硶涓殑浠g爜锛屾鏃剁嚎绋嬪浜庤繍琛岀姸鎬併?備唬鐮佽瑷?锛歫avascript copy public void run() { // 绾跨▼鎵ц鐨勪唬鐮亇 闃诲锛圔locked锛夛細杩愯杩囩▼涓紝绾跨▼鍙兘浼氬洜涓烘煇浜涘師鍥犳殏鏃舵棤娉曠户缁墽琛岋紝姣斿绛夊緟I/ O鎿嶄綔瀹屾垚锛岀瓑寰呰幏鍙朙ock绛夈?傛鏃讹紝绾跨▼杩涘叆闃诲鐘舵?併?備唬鐮佽瑷?锛?javascript copy Synchronized (lock) { // 绛夊緟鑾峰彇閿亇 闃诲鐨勪笁绫伙細 绛夊緟I/O锛氱嚎绋嬫鍦ㄧ瓑寰匢/O鎿嶄綔瀹屾垚锛屾瘮濡傜瓑寰呮枃浠惰鍙栧拰鍐欏叆銆佺綉缁滆姹傜瓑銆傛鏃剁嚎绋嬩細琚寕璧凤紝涓嶅崰鐢–PU璧勬簮銆傚綋I/O鎿嶄綔瀹屾垚鍚庯紝绾跨▼灏嗛噸鏂拌繘鍏ュ彲杩愯鐘舵?併?備唬鐮佽瑷?锛歫avascript copy FileInputStream fis = new FileInputStream("file.txt"); int 鏁版嵁 = fis.read(); // 绛夊緟鏂囦欢璇诲彇瀹屾垚 鍚屾闃诲锛圫ynchronization Blocked锛夛細绾跨▼姝e湪绛夊緟鑾峰彇閿併?傚綋绾跨▼璇曞浘璁块棶琚玸ynchronized鍏抽敭瀛椾慨楗扮殑鍚屾浠g爜鍧楁椂锛岄渶瑕佽幏鍙栭攣銆傚鏋滈攣宸茬粡琚彟涓?涓嚎绋嬫寔鏈夛紝鍒欏綋鍓嶇嚎绋嬪皢琚樆濉炵瓑寰呴攣琚噴鏀俱?備唬鐮佽瑷?锛?javascript copy synchronized (lock) { // 绛夊緟鑾峰彇閿亇 鍏朵粬闃诲锛圤ther Blocked锛夛細绾跨▼姝e湪绛夊緟鏌愪簺绯荤粺璧勬簮锛屾瘮濡傜瓑寰呮搷浣滅郴缁熷垎閰嶅唴瀛樸?佺瓑寰呯嚎绋嬭皟搴︺?佺瓑绛夛紝姝ゆ椂绾跨▼浼氳鎸傝捣锛屼笉鍗犵敤CPU璧勬簮銆傚綋绯荤粺璧勬簮鍙樺緱鍙敤鏃讹紝绾跨▼灏嗛噸鏂拌繘鍏ュ彲杩愯鐘舵?併?備唬鐮佽瑷?锛歫avascript 澶嶅埗Thread.sleep(); // 绛夊緟1绉?浜嗚В杩欎笁绉嶉樆濉炴儏鍐垫湁鍔╀簬鎴戜滑鏇村ソ鍦扮悊瑙e绾跨▼缂栫▼涓殑闂鍜岃В鍐虫柟妗堛?傚湪瀹為檯寮?鍙戜腑锛屾垜浠渶瑕佹牴鎹叿浣撻渶姹傚悎鐞嗘帶鍒剁嚎绋嬬姸鎬侊紝浠ュ疄鐜伴珮鏁堢殑骞跺彂缂栫▼銆傚悓鏃惰娉ㄦ剰閬垮厤姝婚攣銆佽祫婧愮珵浜夌瓑闂銆傜瓑寰咃細杩愯杩囩▼涓紝绾跨▼涓诲姩璋冪敤wait()銆乯oin()鎴杙ark()鏂规硶锛屾殏鏃惰鍑篊PU璧勬簮锛岃繘鍏ョ瓑寰呯姸鎬併?備唬鐮佽瑷?锛歫avascript澶嶅埗lock.wait();瀹氭椂绛夊緟锛氱嚎绋嬫牴鎹瓑寰呯姸鎬佽缃瓑寰呰秴鏃舵椂闂淬?備唬鐮佽瑷?锛歫avascript澶嶅埗lock.wait(timeout);缁堟锛氱嚎绋嬫墽琛屽畬run()鏂规硶涓殑浠g爜锛屾垨鑰呭洜寮傚父缁堟锛岀嚎绋嬭繘鍏ョ粓姝㈢姸鎬併?傜嚎绋嬬姸鎬佷箣闂寸殑杞崲鍏崇郴濡備笅锛?New -> Runnable锛氳皟鐢╯tart()鏂规硶杩愯 -> Run锛氳幏鍙栫郴缁熻祫婧愯繍琛?-> Blocked锛氱瓑寰匢/O鎿嶄綔瀹屾垚锛岀瓑寰呴攣鑾峰彇锛岀瓑杩愯 -> 绛夊緟锛氳皟鐢╳ait()銆乯oin()鎴杙ark()鏂规硶杩愯 -> 瓒呮椂绛夊緟锛氳皟鐢ㄥ甫瓒呮椂鍙傛暟鐨剋ait()鏂规硶杩涜闃诲銆佺瓑寰呫?佽秴鏃剁瓑寰?-> 杩愯锛氳幏鍙栭攣锛?I/O鎿嶄綔瀹屾垚锛岃秴鏃剁瓑寰呯粨鏉熷苟绛夊緟杩愯->缁堟锛歳un()鏂规硶鎵ц瀹屾瘯鎴栧彂鐢熷紓甯搞?備簡瑙g嚎绋嬬殑鐘舵?佹湁鍔╀簬鎴戜滑鏇村ソ鍦扮悊瑙e绾跨▼缂栫▼涓殑闂鍜岃В鍐虫柟妗堛?傚湪瀹為檯寮?鍙戜腑锛屾垜浠渶瑕佹牴鎹叿浣撻渶姹傚悎鐞嗘帶鍒剁嚎绋嬬姸鎬侊紝浠ュ疄鐜伴珮鏁堢殑骞跺彂缂栫▼銆傜嚎绋嬭皟鏁翠紭鍏堢骇 鍦↗ava涓紝鎴戜滑鍙互閫氳繃璋冩暣绾跨▼鐨勪紭鍏堢骇鏉ュ奖鍝嶇嚎绋嬬殑璋冨害銆傜嚎绋嬩紭鍏堢骇鏄竴涓寖鍥翠粠 1锛堟渶浣庝紭鍏堢骇锛夊埌 10锛堟渶楂樹紭鍏堢骇锛夌殑鏁存暟鍊笺?傞粯璁ゆ儏鍐典笅锛屾柊鍒涘缓鐨勭嚎绋嬩笌鍏剁埗绾跨▼鍏锋湁鐩稿悓鐨勪紭鍏堢骇銆傝繖浜涗紭鍏堢骇甯搁噺鍒嗗埆鐢?Thread 绫讳腑鐨?MAX_PRIORITY銆丯ORM_PRIORITY 鍜?MIN_PRIORITY 瀹氫箟銆?Thread.MAX_PRIORITY(10)锛氳〃绀虹嚎绋嬬殑鏈?楂樹紭鍏堢骇銆傚綋绾跨▼鐨勪紭鍏堢骇璁剧疆涓烘渶楂樹紭鍏堢骇鏃讹紝瀹冩湁鏇撮珮鐨勬鐜囪璋冨害鎵ц銆傜劧鑰岋紝杩欏苟涓嶆剰鍛崇潃鏈?楂樹紭鍏堢骇鐨勭嚎绋嬫?绘槸棣栧厛鎵ц銆傜嚎绋嬭皟搴︿粛鐒跺彇鍐充簬鎿嶄綔绯荤粺鍜孞VM瀹炵幇銆?Thread.NORM_PRIORITY(5)锛氳〃绀虹嚎绋嬬殑榛樿浼樺厛绾с?傚綋鏂扮嚎绋嬪垱寤烘椂锛屽鏋滄病鏈夋樉寮忚缃紭鍏堢骇锛屽垯瀹冧細缁ф壙鐖剁嚎绋嬬殑浼樺厛绾с?傞粯璁や紭鍏堢骇閫傚悎澶у鏁扮嚎绋嬶紝涓嶄細瀵艰嚧绾跨▼楗ラタ鎴栬繃澶氱殑绾跨▼鍒囨崲寮?閿?銆?Thread.MIN_PRIORITY(1)锛氳〃绀虹嚎绋嬬殑鏈?浣庝紭鍏堢骇銆傚綋绾跨▼鐨勪紭鍏堢骇璁剧疆涓烘渶浣庝紭鍏堢骇鏃讹紝瀹冭璋冨害鎵ц鐨勬鐜囪緝浣庛?傝繖鍙敤浜庣‘淇濊緝浣庝紭鍏堢骇绾跨▼涓嶄細骞叉壈杈冮珮浼樺厛绾х嚎绋嬬殑鎵ц銆備唬鐮佽瑷?锛歫avascript copy Thread thread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?}); // 璁剧疆绾跨▼浼樺厛绾?thread.setPriority(Thread.MAX_PRIORITY); // 璁剧疆涓烘渶楂樹紭鍏堢骇 thread.setPriority(Thread.NORM_PRIORITY); // 璁剧疆涓洪粯璁や紭鍏堢骇 thread.setPriority(Thread.MIN_PRIORITY); // 璁剧疆涓烘渶浣庝紭鍏堢骇銆傞渶瑕佹敞鎰忕殑鏄紝绾跨▼浼樺厛绾у苟涓嶈兘淇濊瘉绾跨▼浼氭寜鐓ч鏈熺殑椤哄簭鎵ц銆傜嚎绋嬭皟搴︿粛鐒跺彇鍐充簬鎿嶄綔绯荤粺鍜孞VM瀹炵幇銆傛澶栵紝杩囧害渚濊禆绾跨▼浼樺厛绾у彲鑳戒細瀵艰嚧绋嬪簭闅句互缁存姢鍜岀悊瑙c?傚湪瀹為檯寮?鍙戜腑锛屾垜浠簲璇ユ牴鎹簲鐢ㄧ▼搴忓拰绯荤粺璧勬簮鐨勯渶瑕佸悎鐞嗚缃嚎绋嬩紭鍏堢骇锛屼互瀹炵幇楂樻晥鐨勫苟鍙戠紪绋嬨?傚悓鏃惰娉ㄦ剰閬垮厤姝婚攣銆佽祫婧愮珵浜夌瓑闂銆傜嚎绋嬭皟搴︾瓥鐣?绾跨▼璋冨害鏄搷浣滅郴缁熺敤鏉ュ喅瀹氬摢涓嚎绋嬪簲璇ヨ幏寰楀鐞嗗櫒璧勬簮鐨勮繃绋嬨?傜嚎绋嬭皟搴︾瓥鐣ヤ細褰卞搷绋嬪簭鐨勬墽琛屾晥鐜囧拰鍝嶅簲鏃堕棿銆傚父瑙佺殑绾跨▼璋冨害绛栫暐锛?鍗忎綔澶氱嚎绋嬶細鍗忎綔澶氱嚎绋嬫槸涓?绉嶉潪鎶㈠崰寮忕殑绾跨▼璋冨害绛栫暐銆傚湪杩欑绛栫暐涓紝绾跨▼闇?瑕佷富鍔ㄦ斁寮冨鐞嗗櫒璧勬簮锛屼互渚垮叾浠栫嚎绋嬪彲浠ユ墽琛屻?傝繖绉嶈皟搴︾瓥鐣ョ殑浼樼偣鏄疄鐜扮畝鍗曪紝缂虹偣鏄彲鑳藉鑷寸嚎绋嬮ゥ楗匡紙涓?涓嚎绋嬮暱鏃堕棿鏃犳硶鎵ц锛夈?傛姠鍗犲紡澶氱嚎绋嬶細鎶㈠崰寮忓绾跨▼鏄竴绉嶆姠鍗犲紡绾跨▼璋冨害绛栫暐銆傚湪杩欑绛栫暐涓紝鎿嶄綔绯荤粺鍙互闅忔椂鏆傚仠姝e湪鎵ц鐨勭嚎绋嬪苟灏嗗鐞嗗櫒璧勬簮鍒嗛厤缁欏叾浠栫嚎绋嬨?傝繖绉嶈皟搴︾瓥鐣ュ彲浠ラ伩鍏嶇嚎绋嬮ゥ楗匡紝浣嗗疄鐜扮浉瀵瑰鏉傘?備紭鍏堢骇璋冨害锛氫紭鍏堢骇璋冨害鏄竴绉嶅熀浜庣嚎绋嬩紭鍏堢骇鐨勮皟搴︾瓥鐣ャ?傚彲浠ヤ负绾跨▼鍒嗛厤浼樺厛绾э紝浼樺厛绾ц緝楂樼殑绾跨▼鏇存湁鍙兘鑾峰緱澶勭悊鍣ㄨ祫婧愩?備紭鍏堢骇璋冨害鍙互淇濊瘉閲嶈绾跨▼鍏堟墽琛岋紝浣嗗彲鑳戒細瀵艰嚧浣庝紭鍏堢骇绾跨▼楗ラタ銆傚惊鐜皟搴︼細寰幆璋冨害鏄竴绉嶄负绾跨▼鍒嗛厤澶勭悊鍣ㄨ祫婧愮殑鍏钩绛栫暐銆傛瘡涓嚎绋嬮兘鏈変竴涓椂闂寸墖銆傚綋鏃堕棿鐗囩敤瀹屽悗锛岃绾跨▼灏嗚鎸傝捣锛屼互鍏佽鍏朵粬绾跨▼鎵ц銆傝繖绉嶈皟搴︾瓥鐣ュ彲浠ヤ繚璇佹瘡涓嚎绋嬮兘鏈夋墽琛岀殑鏈轰細锛屼絾鍙兘浼氬鑷撮绻佺殑绾跨▼鍒囨崲锛屽鍔犱笂涓嬫枃鍒囨崲寮?閿?銆傛帴涓嬫潵鏈?楂樺搷搴旀瘮鐜囷紙HRRN锛夛細鎺ヤ笅鏉ユ渶楂樺搷搴旀瘮鐜囷紙HRRN锛夋槸涓?绉嶅悓鏃惰?冭檻绾跨▼?瓑寰呮椂闂村拰绾跨▼浼樺厛绾х殑璋冨害绛栫暐銆傜嚎绋嬬殑鍝嶅簲鐜囧畾涔変负锛堢瓑寰呮椂闂?鏈嶅姟鏃堕棿锛?鏈嶅姟鏃堕棿銆傚搷搴旂巼杈冮珮鐨勭嚎绋嬫洿鏈夊彲鑳借幏寰楀鐞嗗櫒璧勬簮銆傝繖绉嶈皟搴︾瓥鐣ュ彲浠ュ湪淇濊瘉鍏钩鎬х殑鍚屾椂锛屾渶澶ч檺搴﹀湴鍑忓皯绾跨▼鐨勭瓑寰呮椂闂淬?傜嚎绋嬬殑鍩烘湰鏂规硶馃悽start()鍚姩绾跨▼銆傝鏂规硶灏嗚皟鐢ㄧ嚎绋嬬殑run()鏂规硶鏉ュ惎鍔ㄧ嚎绋嬫墽琛屻?備唬鐮佽瑷?锛歫avascript copy Thread thread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?});绾跨▼.start(); // 鍚姩绾跨▼鐨勪唬鐮?馃悽run() 绾跨▼鎵ц銆傝鏂规硶闇?瑕佸湪瀹炵幇Runnable鎺ュ彛鐨勭被涓紝鎴栬?呭湪缁ф壙Thread绫荤殑瀛愮被涓噸鍐欍?備唬鐮佽瑷?锛?javascript copy class MyRunnable Implements Runnable { @Override public void run() { // 绾跨▼鎵ц鐨勪唬鐮?}}Thread thread = new Thread(new MyRunnable());thread.start();鎴栬?咃細浠g爜璇█锛歫avascript Copy class MyThread extends Thread { @Override public void run() { // 绾跨▼鎵ц鐨勪唬鐮?}}MyThread thread = new MyThread();thread.start();馃悽join() 绛夊緟绾跨▼鎵ц鏉ュ畬鎴愩?傛鏂规硶浼氶樆濉炲綋鍓嶇嚎绋嬶紝鐩村埌琚皟鐢ㄧ殑绾跨▼瀹屾垚鎵ц銆備唬鐮佽瑷?锛歫avascript copy Thread thread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?});绾跨▼.start();绾跨▼.join(); // 绛夊緟绾跨▼鎵ц瀹屾垚馃悽sleep(long millis) 浠ヤ娇鐢ㄥ綋鍓嶇嚎绋嬫殏鍋滄墽琛屾寚瀹氱殑鏃堕棿锛堜互姣涓哄崟浣嶏級銆傝鏂规硶闇?瑕佸湪 try 鍧楀唴璋冪敤锛屽洜涓哄畠鍙兘鎶涘嚭 InterruptedException銆備唬鐮佽瑷?锛歫avascript copy try { Thread.sleep(); // 鏆傚仠褰撳墠绾跨▼1绉拀 catch (InterruptedException e) { e.printStackTrace();}馃悽interrupt() 涓柇绾跨▼銆傝鏂规硶璁剧疆绾跨▼鐨勪腑鏂爣蹇楋紝绾跨▼鍙互閫氳繃妫?鏌sInterrupted()鏂规硶鏉ュ搷搴斾腑鏂?備唬鐮佽瑷?锛歫avascript copy Thread thread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { // 绾跨▼鎵ц鐨勪唬鐮?}});thread.start();thread.interrupt ( ); // 涓柇绾跨▼ 馃悽isAlive() 浠ユ鏌ョ嚎绋嬫槸鍚︿粛鍦ㄨ繍琛屻?傚鏋滅嚎绋嬪凡鍚姩涓斿皻鏈粓姝紝鍒欒繑鍥?true銆備唬鐮佽瑷?锛歫avascript copy Thread thread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?});绾跨▼.start(); boolean isAlive = thread.isAlive(); // 妫?鏌ョ嚎绋嬫槸鍚︿粛鍦ㄨ繍琛?馃悽getId()锛氳幏鍙栫嚎绋嬬殑鍞竴鏍囪瘑绗︺?備唬鐮佽瑷?锛歫avascript copy Thread thread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?});绾跨▼.start();闀跨嚎绋婭d = thread.getId(); // 鑾峰彇绾跨▼鐨勫敮涓?鏍囪瘑绗︷煇etName () 鍜?setName(String name) 鑾峰彇鍜岃缃嚎绋嬬殑鍚嶇О銆備唬鐮佽瑷?锛歫avascript copy Thread thread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?}); thread.setName("MyThread"); // 璁剧疆绾跨▼鍚嶇О String threadName = thread.getName(); // 鑾峰彇绾跨▼鍚嶇О馃悽getPriority() 鍜?setPriority(intpriority)锛氳幏鍙栧拰璁剧疆绾跨▼鐨勪紭鍏堢骇銆備唬鐮佽瑷?锛歫avascript copy Thread thread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?}); thread.setPriority(Thread.MAX_PRIORITY); // 璁剧疆绾跨▼浼樺厛绾?int threadPriority = thread.getPriority(); //鑾峰彇绾跨▼浼樺厛绾?馃悽currentThread()鑾峰彇褰撳墠姝e湪鎵ц鐨勭嚎绋嬨?備唬鐮佽瑷?锛歫avascript copy Thread currentThread = Thread.currentThread(); // 鑾峰彇褰撳墠姝e湪鎵ц鐨勭嚎绋?馃悽yield() 褰撶嚎绋嬭皟鐢▂ield()鏂规硶鏃讹紝瀹冧細涓诲姩鏀惧純褰撳墠鐨凜PU鏃堕棿鐗囷紝璁╄嚜宸变粠杩愯鐘舵?侊紙RUNNING锛夎浆鍙樹负灏辩华鐘舵?侊紙RUNNABLE锛夈?傝繖鏍凤紝鍏朵粬鍏锋湁鐩稿悓浼樺厛绾х殑绾跨▼灏辨湁鏈轰細鑾峰緱CPU鏃堕棿鐗囧苟鎵ц銆傞渶瑕佹敞鎰忕殑鏄紝yield()鏂规硶骞朵笉鑳戒繚璇佸綋鍓嶇嚎绋嬬珛鍗冲仠姝㈡墽琛屻?傜嚎绋嬭皟搴︾▼搴忓彲浠ヨ嚜鐢卞喅瀹氭槸鍚︾珛鍗宠皟搴﹀叾浠栫嚎绋嬨?備簨瀹炰笂锛寉ield()鏂规硶鐨勬晥鏋滃線寰?鍙栧喅浜庡叿浣撶殑鎿嶄綔绯荤粺鍜孞VM瀹炵幇銆傚湪鏌愪簺鎯呭喌涓嬶紝璋冪敤yield()鍙兘鍙槸璁╁綋鍓嶇嚎绋嬬煭鏆備紤鎭紝鐒跺悗鍐嶆蹇?熻幏寰桟PU鏃堕棿鐗囥??Yield()鏂规硶鐨勪娇鐢ㄥ満鏅浉瀵硅緝灏戯紝涓?鑸笉寤鸿杩囧渚濊禆瀹冩潵鎺у埗绾跨▼鐨勬墽琛岄『搴忋?傛洿濂界殑鍋氭硶鏄娇鐢ㄥ叾浠栧悓姝ュ伐鍏凤紝濡倃ait()銆乶otify()銆丼emaphore銆丩ock绛夛紝鏉ュ疄鐜扮嚎绋嬩箣闂寸殑鍗忚皟鍜屾帶鍒躲??t1绾跨▼鍦ㄥ惊鐜揪鍒?鏃惰皟鐢▂ield()锛岃繖鍙兘浼氬皢CPU璁╃粰t2绾跨▼鎵ц銆傜劧鑰岋紝?繖骞朵笉鏄粷瀵圭殑锛屽彇鍐充簬绾跨▼璋冨害绋嬪簭鐨勫喅瀹氥?備唬鐮佽瑷?锛?javascript copy public class YieldExample { public static void main(String[] args) { Thread t1 = new Thread(() -> { for (int i = 0; i < 5; i++) { System.out.println ("Thread t1: " + i); if (i == 2) { Thread.yield(); // 鏀惧純CPU鏃堕棿鐗噠 } });绾跨▼ t2 = new Thread(() -> { for (int i = 0; i < 5; i++) { System.out.println("绾跨▼ t2: " + i); } }); t1.start(); t2.start(); }}绾跨▼绫诲瀷 鐢ㄦ埛绾跨▼锛圲ser Thread锛?鐢ㄦ埛绾跨▼鏄敱绋嬪簭鍛樺垱寤哄拰绠$悊鐨勭嚎绋嬨?傚畠浠?氬父鐢ㄤ簬鎵ц鐗瑰畾浠诲姟锛屼緥濡傚鐞嗙敤鎴疯緭鍏ャ?佹墽琛岃绠椾换鍔$瓑銆傜敤鎴风嚎绋嬬殑鍒涘缓鍜岀鐞嗗畬鍏ㄥ湪绋嬪簭鍛樼殑鎺у埗涔嬩笅銆備唬鐮佽瑷?锛歫avascript copy Thread userThread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?}); userThread.start();瀹堟姢绾跨▼锛圖aemon Thread锛?瀹堟姢绾跨▼鏄竴绉嶇壒娈婄被鍨嬬殑绾跨▼锛屽畠鐨勪富瑕佸姛鑳芥槸涓哄叾浠栫嚎绋嬫彁渚涙湇鍔°?傚畧鎶ょ嚎绋嬪湪鍚庡彴杩愯锛屼笉浼氶樆姝?JVM 姝e父缁堟銆傚綋鎵?鏈夐潪瀹堟姢绾跨▼锛堝嵆鐢ㄦ埛绾跨▼锛夌粨鏉熸椂锛屽畧鎶ょ嚎绋嬩細鑷姩缁堟銆傚畧鎶ょ嚎绋嬮?氬父鐢ㄤ簬鎵ц鍚庡彴浠诲姟锛屼緥濡傚瀮鍦炬敹闆嗐?佸唴瀛樼鐞嗙瓑銆備唬鐮佽瑷?锛歫avascript copy Thread daemonThread = new Thread(() -> { // 绾跨▼鎵ц鐨勪唬鐮?}); daemonThread.setDaemon(true); // 璁剧疆涓哄畧鎶ょ嚎绋?daemonThread.start();涓荤嚎绋嬶紙Main Thread锛?涓荤嚎绋嬫槸Java绋嬪簭鐨勫叆鍙g偣銆傚綋Java绋嬪簭鍚姩鏃讹紝JVM浼氬垱寤轰竴涓富绾跨▼鏉ユ墽琛宮ain鏂规硶銆備富绾跨▼閫氬父璐熻矗鍚姩鍏朵粬绾跨▼銆佸垵濮嬪寲绋嬪簭鍜屽叾浠栦换鍔°?傚綋涓荤嚎绋嬬粨鏉熸椂锛孞VM浼氱瓑寰呮墍鏈夐潪瀹堟姢绾跨▼缁撴潫鍚庡啀缁堟銆備唬鐮佽瑷?锛歫avascript copy public class MainThreadExample { public static void main(String[] args) { // 涓荤嚎绋嬫墽琛岀殑浠g爜 }} 绾跨▼姹犵嚎绋嬶紙Thread Pool Thread锛?绾跨▼姹犵嚎绋嬫槸绾跨▼姹犵鐞嗙殑绾跨▼銆傜嚎绋嬫睜鏄竴绉嶇鐞嗗拰澶嶇敤绾跨▼鐨勬満鍒讹紝鍙互鎻愰珮绯荤粺鎬ц兘鍜岃祫婧愬埄鐢ㄧ巼銆傜嚎绋嬫睜绾跨▼鏄湪绾跨▼姹犱腑鍒涘缓鍜岀鐞嗙殑銆傚綋闇?瑕佹墽琛屼换鍔℃椂锛岀嚎绋嬫睜浼氬垎閰嶄竴涓┖闂茬殑绾跨▼姹犵嚎绋嬫潵鎵ц璇ヤ换鍔°?備换鍔″畬鎴愬悗锛岀嚎绋嬫睜绾跨▼浼氳繑鍥炵嚎绋嬫睜绛夊緟涓嬩竴涓换鍔°?備唬鐮佽瑷?锛歫avascript copy ExecutorService threadPool = Executors.newFixedThreadPool(5);threadPool.execute(() -> { // 绾跨▼鎵ц浠g爜 });绾跨▼姹?shutdown();瀹氭椂鍣ㄧ嚎绋嬶紙Timer Thread锛?瀹氭椂鍣ㄧ嚎绋嬫槸鐢ㄦ潵鎵ц棰勫畾浠诲姟鐨凾hread銆?Java鎻愪緵浜唈ava.util.Timer绫绘潵瀹炵幇瀹氭椂浠诲姟銆傚畾鏃跺櫒绾跨▼浼氬湪鎸囧畾鐨勬椂闂撮棿闅斿唴鎵ц浠诲姟锛屾垨鑰呭湪鎸囧畾鐨勬椂闂寸偣鎵ц浠诲姟銆備唬鐮佽瑷?锛歫avascript copy Timertimer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { // 绾跨▼鎵ц鐨勪唬鐮?}}, ); // 寤惰繜1绉掑悗鎵ц浠诲姟鍐欏叆 褰掓牴缁撳簳锛屽苟鍙戠紪绋嬫槸涓?绉嶅厑璁稿涓换鍔″湪鍚屼竴鏃堕棿娈靛唴鐙珛杩愯鐨勭紪绋嬭寖寮忋?傚湪Java涓紝骞跺彂缂栫▼鍏虫敞鐨勬槸濡備綍鍦ㄥ涓嚎绋嬩箣闂撮珮鏁堝湴鍏变韩璧勬簮鍜屽崗璋冩搷浣滐紝浠ュ疄鐜伴珮鎬ц兘鍜屽搷搴旇兘鍔涖?傚湪鐜颁唬杞欢寮?鍙戜腑锛岄殢鐫?纭欢鎶?鏈殑鍙戝睍锛屽鏍稿鐞嗗櫒宸茬粡鎴愪负涓绘祦銆備负浜嗗厖鍒嗗埄鐢ㄥ鏍稿鐞嗗櫒鐨勬?ц兘锛屾垜浠渶瑕佺紪鍐欏苟鍙戠▼搴忋?傚苟鍙戠紪绋嬩笉浠呭彲浠ユ彁楂樼▼搴忕殑鎬ц兘锛岃繕鍙互鎻愰珮绋嬪簭鐨勫搷搴旇兘鍔涘拰璧勬簮鍒╃敤鐜囥?傝繖瀵逛簬鎻愬崌鐢ㄦ埛浣撻獙鍜岀郴缁熷悶鍚愰噺鍏锋湁閲嶈鎰忎箟銆傛垜浠渶瑕佹牴鎹叿浣撶殑闇?姹傚拰鍦烘櫙閫夋嫨鍚堥?傜殑骞跺彂缂栫▼鎶?鏈拰宸ュ叿銆傞?氳繃瀵瑰苟鍙戠紪绋嬬殑娣卞叆瀛︿範鍜屽疄璺碉紝鎴戜滑鍙互鏇村ソ鍦扮悊瑙ava骞跺彂缂栫▼鐨勫師鐞嗗拰搴旂敤锛屼粠鑰屽湪瀹為檯椤圭洰涓疄鐜伴珮鎬ц兘鍜屽彲鎵╁睍鐨勫簲鐢ㄣ?傚湪浠婂悗鐨勫伐浣滀腑锛屾垜灏嗙户缁叧娉ㄥ苟鍙戠紪绋嬬殑鏈?鏂板姩鎬佸拰鎶?鏈紝浠ヤ究涓洪」鐩拰鍥㈤槦鎻愪緵鏇村ソ鐨勬敮鎸佸拰鎸囧銆傛垜姝e湪鍙傚姞鑵捐绉戞妧鍒涢?犵壒璁惀鏈?鏂颁綔鏂囬泦锛屽揩鏉ュ拰鎴戝垎浜鍝佸惂锛?

张三的并发编程实践:掌握多线程技巧,打造高性能应用!

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 中关村房山园区将向园区企业引进200余种科技服务产品

    中关村房山园区将向园区企业引进200余种科技服务产品

    头条新闻,近日,首个中关村社区科技服务站正式揭牌,落地中关村房山园区。 该站将为中关村房山园区企业引进首批多种科技服务产品和数百名服务管家,以标准化、清单化的方式为园区企业提供自选、一体化、个性化服务。 据了解,在中关村社区科技服务站举行的签约仪式上,中关

    06-17

  • 面对疫情期间的就业困境,副业如何扛起主业的经济大旗?

    面对疫情期间的就业困境,副业如何扛起主业的经济大旗?

    猎聘大数据研究院发布《应届毕业生春招求职报告》显示,学校陷入“极其困难”的就业困境,高达76.4%的毕业生未签约。 在职专业人士也不能幸免。 大工厂裁员、教育培训行业消失、房地产市场萎缩……行业突变,让数百万人陷入失业和求职浪潮。 线下实体店遭受多方攻击,超万家门

    06-17

  • 360收购文档协作产品易方云

    360收购文档协作产品易方云

    据投资界4月21日消息,据Tech星球报道,将全资收购企业文档管理及协作SaaS产品易方云,进军企业在线领域办公室。 一方云可在PC端、WEB端、移动端使用。 其功能更偏向B端,更适合企业使用。 易方云正在通过“网盘+协同办公”的结合深度开拓办公市场。 目前,一方云为企业提供4

    06-18

  • 你在等什么?企业代码应用场景大赛来了,快来一展身手吧!

    你在等什么?企业代码应用场景大赛来了,快来一展身手吧!

    为贯彻落实浙江省委、省政府关于加快企业代码推广应用的工作部署,创新企业代码线上线下应用场景,推动更多高频应用为满足基于需求、具有区域特色的服务,浙江省经济和信息化厅决定在2019年“创客中国”浙江赛区暨浙江好工程中小微企业组织企业代码应用场景专题竞赛创新创业大

    06-17

  • 让全脑成像成为可能,汇创医疗完成数千万元A轮融资

    让全脑成像成为可能,汇创医疗完成数千万元A轮融资

    据投资界9月1日消息,据动脉网报道,丹阳市汇创医疗器械有限公司(以下简称“汇创医疗”)汇创医疗)宣布完成数千万元A轮融资。 本轮融资由清远投资领投。 本轮融资将主要用于研发投入、市场开拓以及补充流动资金。 汇创医疗专注于近红外脑成像及评估研究,承担了包括国家重

    06-18

  • 国家税务总局明确延长2月份纳税申报期限

    国家税务总局明确延长2月份纳税申报期限

    1月30日,党委书记与国家税务总局局长王军主持召开党委扩大会议,重新部署税务系统疫情防控工作新型冠状病毒感染引起的肺炎疫情。 。 会议指出,根据疫情防控需要,全国2月纳税申报截止日期延长至2月24日;湖北等疫情严重地区,可根据情况适当延长;对于因疫情影响仍难以办理

    06-18

  • 黄光裕发声,美国半天涨70亿

    黄光裕发声,美国半天涨70亿

    黄光裕终于回来了。 2月17日,国美零售控股有限公司、国美金融科技有限公司、拉金娱乐集团有限公司(国美旗下互联网娱乐公司)分别发布公告称,黄光裕假释缓刑期已于2月到期2020年12月16日,原判刑满,正式释放。 “回顾我们走过的34年,我们深知创业并不容易。 ”昨晚(2月1

    06-17

  • 执掌580亿的玻尿酸女王也来LP

    执掌580亿的玻尿酸女王也来LP

    华熙生物今年首笔LP投资亮相。 投资界获悉,上周,华熙生物发布公告称,公司拟与关联方上海医生集团(深圳)有限公司及华熙生物共同投资设立私募股权基金海南海西股权投资合伙企业(有限合伙)。 其他各方投资额为人民币10,000元。 元。 这被认为是华熙生物在LP版图的最新举措

    06-18

  • 紫光展锐FPGA产品亮相慕尼黑电子展

    紫光展锐FPGA产品亮相慕尼黑电子展

    7月3日至5日,被誉为中国电子制造业风向标的“2019慕尼黑上海电子展”将在国家会展中心(上海)。 届时,紫光展锐旗下紫光展锐同创将重点展示Logos系列高性价比FPGA和Compact系列低功耗CPLD产品,重点展示在工业控制、消费电子等领域的最新应用。 欢迎莅临展位交流,展位号为

    06-06

  • 8部门联合约谈美团等10家交通平台企业

    8部门联合约谈美团等10家交通平台企业

    5月14日上午,交通运输部、中央网信办、国家发展改革委、工业和信息化部、公安部、人力资源社会保障部、工业和信息化部、国家市场监督管理总局、国家信检局等八家交通运输新业态协同监管部际联席会议成员单位滴滴出行、首汽网约车、曹操出行、美团出行、T3出行、高德出行、嘀

    06-18

  • 此次,互联网新经济企业率先奔赴郑州,

    此次,互联网新经济企业率先奔赴郑州,

    7月20日郑州遭遇罕见特大暴雨,全国各地企业纷纷驰援,且企业集中在“互联网”新经济领域等企业。 昨天晚间,腾讯公益基金会率先紧急公布第一批1亿元捐款,并在其平台设立“河南抗洪救助”版块,为全国网友开通捐款渠道。 昨天晚上,阿里巴巴成立“抗灾积极小组”,高德发布“

    06-17

  • 中芯国际为何难以追上台企?

    中芯国际为何难以追上台企?

    观察者网 5月21日,台湾《世界杂志》发表文章讨论中国大陆和台湾的半导体制造企业。 中芯国际是继台积电、格罗方德、联华电子之后的全球第四大专业晶圆代工厂。 但根据数据公司IC Insights 2017年的统计,前两名占据了全球70%的市场份额。 中芯国际虽然排名第四,但市场份额仅

    06-06