当前位置: 首页 > 后端技术 > Java

你知道JUC是什么吗?

时间:2023-04-01 17:15:03 Java

澶氱嚎绋嬩竴鐩存槸Java寮€鍙戠殑闅剧偣锛屼篃鏄潰璇曠殑甯稿銆傝秮鐫€杩樻湁鏃堕棿锛屾垜鎵撶畻宸╁浐涓€涓嬫垜瀵笿UC鐨勭煡璇嗐€傛垜瑙夊緱鏈轰細闅忓鍙锛屼絾鎬绘槸鐣欑粰鏈夊噯澶囩殑浜恒€傚笇鏈涙垜浠兘鑳藉仛鍒版渶濂斤紒锛侊紒鍐嶆矇娴紝鎴戞兂鎴戜滑浼氬彉寰椾笉涓€鏍枫€備竴銆丣UC绠€浠婮UC鍏跺疄灏辨槸鎴戜滑瀵筳dk涓璲ava.util.concurrenttoolkit鐨勭畝绉般€傝繖涓寘鏄墍鏈塉ava澶勭悊绾跨▼鐩稿叧鐨勭被锛屼粠jdk1.5寮€濮嬪氨鍑虹幇浜嗐€?.杩涚▼鍜岀嚎绋?.1.杩涚▼姒傝堪锛氳繘绋嬶紙Process锛夋槸璁$畻鏈轰腑绋嬪簭瀵逛竴瀹氭暟鎹泦鐨勮繍绠楁椿鍔ㄣ€傚畠鏄郴缁熻祫婧愬垎閰嶅拰璋冨害鐨勫熀鏈崟浣嶏紝鏄搷浣滅郴缁熺粨鏋勭殑鍩虹銆傚湪褰撲唬闈㈠悜绾跨▼鐨勮绠楁満浣撶郴缁撴瀯涓紝杩涚▼鏄嚎绋嬬殑瀹瑰櫒銆傜▼搴忔槸瀵规寚浠ゃ€佹暟鎹強鍏剁粍缁囧舰寮忕殑鎻忚堪锛岃繘绋嬫槸绋嬪簭鐨勫疄浣撱€傚畾涔夛細鐙箟瀹氫箟锛氳繘绋嬫槸姝e湪鎵ц鐨勮绠楁満绋嬪簭鐨勪竴涓疄渚嬨€傚箍涔夊畾涔夛細杩涚▼鏄叿鏈変竴瀹氱嫭绔嬪姛鑳界殑绋嬪簭鍦ㄤ竴瀹氭暟鎹泦涓婄殑杩愯娲诲姩銆傚畠鏄搷浣滅郴缁熷姩鎬佹墽琛岀殑鍩烘湰鍗曞厓銆傚湪浼犵粺鐨勬搷浣滅郴缁熶腑锛岃繘绋嬫棦鏄熀鏈殑鍒嗛厤鍗曞厓锛屼篃鏄熀鏈殑鎵ц鍗曞厓銆?.2.Thread绾跨▼锛坱hread锛夋槸鎿嶄綔绯荤粺鍙互杩涜鎿嶄綔璋冨害鐨勬渶灏忓崟浣嶃€傚畠鍖呭惈鍦ㄦ祦绋嬩腑锛屾槸娴佺▼涓殑瀹為檯鎿嶄綔鍗曞厓銆傜嚎绋嬫槸鎸囪繘绋嬩腑鐨勫崟涓『搴忔帶鍒舵祦銆傚涓嚎绋嬪彲浠ュ湪涓€涓繘绋嬩腑骞跺彂杩愯锛屾瘡涓嚎绋嬪苟琛屾墽琛屼笉鍚岀殑浠诲姟銆?銆佺嚎绋嬫槸鐙珛璋冨害璋冨害鐨勫熀鏈崟浣嶃€?銆佸悓涓€涓繘绋嬩腑鐨勫涓嚎绋嬩細鍏变韩杩涚▼涓墍鏈夌殑绯荤粺璧勬簮銆?銆佷竴涓繘绋嬪彲浠ユ湁澶氫釜绾跨▼锛屾瘡涓嚎绋嬪苟琛屾墽琛屼笉鍚岀殑浠诲姟銆傚彲浠ュ苟鍙戞墽琛屻€傚綋鐒禞ava涓垜浠兘鐭ラ亾鐨勭嚎绋嬬殑鍚屾鏄疛ava澶氱嚎绋嬬紪绋嬬殑闅剧偣锛屽洜涓哄叡浜祫婧愶紙绔炰簤璧勬簮锛夌粰鍒板摢閲岋紝浠€涔堟椂鍊欒€冭檻鍚屾绛夌瓑锛岄兘鏄紪绋嬬殑闅剧偣銆傪煒毦鎬湁閭d箞澶氭淮婕忛攣锛岀湅鐫€灏辩儲銆?.3.鍒涘缓绾跨▼鐨勪笁绉嶅父瑙佹柟寮忛€氳繃瀹炵幇Runnable鎺ュ彛鍒涘缓Thread绾跨▼绾跨▼thread1=newThread(runnable);thread1.start();//lamda琛ㄨ揪寮忔柟娉昑hreadthread2=newThread(()->{System.out.println("浣跨敤lamda琛ㄨ揪寮忔柟娉?);});thread2.start();}}classSomeRunnableimplementsRunnable{@Overridepublicvoidrun(){System.out.println(Thread.currentThread().getName()+"::閫氳繃瀹炵幇Runnable鎺ュ彛鍒涘缓Thread绾跨▼");}}2.閫氳繃缁ф壙Thread绫诲垱寤虹嚎绋媝ublicclassTheardCreateDemo{publicstaticvoidmain(String[]args){SomeThreadthread=newSomeThread();thread.start();}}classSomeThreadextendsThread{@Overridepublicvoidrun(){System.out.println("閫氳繃缁ф壙Thread绫诲垱寤轰竴涓嚎绋?);}}3銆傞€氳繃瀹炵幇Callable鎺ュ彛鍒涘缓Thread绾跨▼publicclassTheardCreateDemo{publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{FutureTaskfutureTask=newFutureTask(newSomeCallable());绾跨▼oneThread=newThread(futureTask);涓€涓嚎绋?start();//杩欓噷鍙互寰楀埌杩愯鍚庣殑杩斿洖鍊糞ystem.out.println(futureTask.get());}}classSomeCallableimplementsCallable{@OverridepublicObjectcall()throwsException{System.out.println("閫氳繃瀹炵幇Callable鎺ュ彛Thread绾跨▼鍒涘缓");//杩欎釜鍙互杩斿洖鏁版嵁锛岃繖閲岃繑鍥?024灏辫return(Object)"杩欎釜鍙互杩斿洖鏁版嵁锛岃繖閲岄殢渚胯繑鍥?;}}杩欓噷鍚庨潰浼氭湁涓€绡囨枃绔犺鍒拌繖涓€鐐逛互涓嬫槸鍑犱釜姝ラ锛殅姝ラ1锛氬垱寤轰竴涓疄鐜癈allable鎺ュ彛鐨勭被SomeCallable姝ラ2锛氬垱寤轰竴涓被瀵硅薄锛欳allableoneCallable=newSomeCallable();绗笁姝ワ細閫氳繃Callable鍒涘缓涓€涓狥utureTask瀵硅薄锛欶utureTaskfutureTask=newFutureTask(oneCallable);娉ㄦ剰锛欶utureTask鏄竴涓寘瑁呭櫒锛屽畠鏄€氳繃鎺ュ彈Callable鍒涘缓鐨勶紝瀹冨悓鏃跺疄鐜颁簡Future鍜孯unnable鎺ュ彛銆傜4姝ワ細浠嶧utureTask鍒涘缓涓€涓猅hread瀵硅薄锛歍hreadoneThread=newThread(futureTask);绗簲姝ワ細鍚姩绾跨▼锛歰neThread.start();Thread(FutureTaskfutureTask)涓轰粈涔堝彲浠ュ湪杩欓噷宸ヤ綔锛烼hread鐨勬瀯閫犲嚱鏁帮細publicThread(Runnabletarget){this(null,target,"Thread-"+nextThreadNum(),0);}鍘熷洜锛氬洜涓哄濞冨鍦ㄤ竴璧枫€傪煒乸ublicclassFutureTaskimplementsRunnableFuturepublicinterfaceRunnableFutureextendsRunnable,Future绾跨▼姹犵殑鍒涘缓鏂规硶鍚庨潰涓€绔犱細璁插埌锛岃繖閲屼笉鍐嶈禈杩般€?.骞跺彂涓庡苟琛屽湪鐞嗚В骞跺彂涓庡苟琛屼箣鍓嶏紝鎴戜滑鍏堟潵鐪嬬湅涓茶鏄粈涔堟牱瀛愮殑銆?锛変覆琛屾ā寮忥細Serialmode锛氳〃绀烘墍鏈変换鍔℃寜椤哄簭鎵ц銆係erial灏辨槸姣忔鍙彇涓€涓猼ask锛屾墽琛岃繖涓猼ask銆備妇涓敓娲讳腑鐨勫皬渚嬪瓙锛氬湪鐏溅绔欎拱绁紝浠婂ぉ鍙紑杩欎釜绐楀彛鍗栫エ锛屾墍浠ュ彧鏈夊墠闈㈢殑浜洪兘涔板ソ浜嗭紝鎴戜滑鎵嶈兘涔扮エ銆備篃灏辨槸鎸夐『搴忎拱绁ㄣ€?锛夊苟琛屾柟寮忥細姒傝堪锛氫竴缁勭▼搴忎互鐙珛銆佸紓姝ョ殑閫熷害鎵ц锛屾棤璁哄井瑙傝繕鏄畯锛岀▼搴忛兘涓€璧锋墽琛屻€傜浉瀵硅€岃█锛屽苟鍙戞槸鎸囷細鍦ㄥ悓涓€鏃堕棿娈靛唴锛屾墽琛屼袱涓垨澶氫釜绋嬪簭锛屾椂闂撮噸鍙狅紙瀹忚涓婂悓鏃舵墽琛岋紝寰涓婇『搴忔墽琛岋級銆傚苟琛屾ā寮忥細骞惰鏄寚鍙互鍚屾椂鑾峰彇澶氫釜浠诲姟锛岃繖浜涜幏鍙栧埌鐨勪换鍔″彲浠ュ悓鏃舵墽琛屻€傛垜浠繕鏄敤涓婇潰鐨勪緥瀛愶細鎴戜滑杩樻槸涔扮エ銆傝繃鍘诲敭绁ㄧ獥鍙e彧鏈変竴涓紝杩戝嚑骞村彂灞曞埌鐜板湪鏈変簲涓獥鍙e敭绁紝澶уぇ缂╃煭浜嗕汉浠拱绁ㄧ殑鏃堕棿銆傚苟琛屾ā寮忕浉褰撲簬鎶婁竴涓暱闃熷垪鍒嗘垚浜嗗涓煭闃熷垪锛屽洜姝や换鍔¢槦鍒楃殑闀垮害琚苟琛岀殑缂╃煭浜嗐€備絾鏄紝骞惰鐨勬晥鐜囦竴鏂归潰鍙楀埌澶氳繘绋?绾跨▼缂栫爜璐ㄩ噺鐨勫奖鍝嶏紝鍙︿竴鏂归潰浠庣‖浠惰搴︿篃鍙楀埌CPU鐨勫奖鍝嶃€?锛塁oncurrency锛氬苟鍙戯細骞跺彂鎸囩殑鏄涓▼搴忓彲浠ュ悓鏃惰繍琛岀殑鐜拌薄銆傚苟鍙戠殑鎰忎箟鍦ㄤ簬瀹冩槸涓€绉嶇幇璞°€傚苟鍙戞弿杩颁簡澶氫釜杩涚▼鍚屾椂杩愯鐨勭幇璞°€備絾鐪熸鎰忎箟涓婏紝鍗曟牳CPU鍦ㄥ悓涓€鏃跺埢鍙兘杩愯涓€涓嚎绋嬨€傛墍浠ヨ繖閲岀殑鈥滃悓鏃惰繍琛屸€濆苟涓嶆槸璇存湁澶氫釜绾跨▼鍚屾椂杩愯锛堣繖灏辨槸骞惰鐨勬蹇碉級锛岃€屾槸鎻愪緵浜嗕竴涓姛鑳斤紝鍙互璁╃敤鎴风湅鍒板涓▼搴忓悓鏃惰繍琛岋紝浣嗗疄闄呬笂锛岃繖浜涚▼搴忎腑鐨勮繘绋嬪苟涓嶆槸涓€鐩村崰鐢–PU锛岃€屾槸鏍规嵁CPU鐨勮皟搴︼紝鎵ц涓€浼氬効锛屽仠姝竴浼氬効銆?锛夌畝鍗曟€荤粨涓€涓嬶細骞跺彂锛氫篃灏辨槸澶氫釜绾跨▼鍦ㄥ悓鏃惰闂悓涓€涓祫婧愶紝澶氫釜绾跨▼鍦ㄤ竴涓偣涓娿€備緥瀛愶細绉掓潃娲诲姩銆?2306鎶㈠洖瀹堕棬绁ㄣ€佹姠婕斿敱浼氶棬绁ㄢ€︹€﹀苟琛岋細澶氫釜浠诲姟涓€璧锋墽琛岋紝鐒跺悗姹囨€汇€備緥瀛愶細鐢甸キ鐓茬叜楗紝閿呴噷鐓キ锛屼袱涓笢瑗夸竴璧凤紝锛堢粓浜庝竴璧风叜浜嗮煒侊級4.鐢ㄦ埛绾跨▼鍜屽畧鎶ょ嚎绋嬬敤鎴风嚎绋嬶細琛ㄧず涓嶉渶瑕佸唴鏍哥敤鎴风▼搴忎腑瀹炵幇鐨勭嚎绋嬩笉渚濊禆鎿嶄綔绯荤粺鐨勬牳蹇冦€傚簲鐢ㄨ繘绋嬩娇鐢ㄧ嚎绋嬪簱鎻愪緵鍒涘缓銆佸悓姝ャ€佽皟搴﹀拰绠$悊绾跨▼鐨勫姛鑳芥潵鎺у埗鐢ㄦ埛绾跨▼銆傚畧鎶ょ嚎绋嬶細鎸囩▼搴忚繍琛屾椂鍦ㄥ悗鍙版彁渚涢€氱敤鏈嶅姟鐨勭嚎绋嬶紝鐢ㄤ簬涓虹敤鎴风嚎绋嬫湇鍔★紱涓嶉渶瑕佷笂灞傞€昏緫骞查锛屽綋鐒舵垜浠篃鍙互鎵嬪姩鍒涘缓瀹堟姢绾跨▼銆傦紙澶х櫧璇濓細灏辨槸瀹堟姢鐢ㄦ埛绾跨▼锛屽綋鐢ㄦ埛绾跨▼姝讳簡锛屽畧鎶ょ嚎绋嬩篃浼氭銆傦級姣斿鍨冨溇鍥炴敹绾跨▼灏辨槸涓€涓潪甯哥О鑱岀殑瀹堟姢鑰咃紝鑰岃繖涓嚎绋嬪苟涓嶆槸绋嬪簭涓嶅彲鎴栫己鐨勪竴閮ㄥ垎.閮ㄥ垎銆傚洜姝わ紝褰撴墍鏈夐潪瀹堟姢绾跨▼缁撴潫鏃讹紝绋嬪簭缁堟锛屾潃姝昏繘绋嬩腑鐨勬墍鏈夊畧鎶ょ嚎绋嬨€傜浉鍙嶏紝鍙浠讳綍闈炲畧鎶ょ嚎绋嬩粛鍦ㄨ繍琛岋紝绋嬪簭灏变笉浼氱粓姝€傜敤涓€娈电畝鍗曠殑浠g爜鏉ユā鎷熶竴涓嬶細褰撴病鏈夎缃负瀹堟姢绾跨▼鏃讹細涓荤嚎绋嬫墽琛屽畬姣曪紝鑰屾垜浠垱寤虹殑绾跨▼杩樻病鏈夋墽琛屽畬銆傝缃负瀹堟姢绾跨▼鍚庯細鍙互鏄庢樉鐪嬪嚭锛屽綋涓荤嚎绋嬫墽琛屾椂锛屾垜浠缃负瀹堟姢绾跨▼鐨勭嚎绋嬩篃琚己鍒剁粓姝€俿etDaemon璁剧疆鏄惁涓哄畧鎶ょ嚎绋嬨€?.鑷█鑷鏈€杩戝張寮€濮嬪涔燡UC浜嗭紝鎰熻Java鐨勫唴瀹圭湡鐨勫緢澶氾紝浣嗘槸瑕佹兂璧扮殑鏇磋繙锛岃繕鏄寰楄鎵撳ソ鍩虹銆傛渶杩戞寔缁洿鏂颁腑銆傚鏋滆寰楀浣犳湁甯姪锛屾劅鍏磋叮鐨勮瘽锛岃鍏虫敞鎴戯紝璁╂垜浠竴璧峰涔犺璁恒€傚ぇ瀹跺ソ锛屾垜鏄崥涓诲畞鍦ㄦ槬锛孞ava瀛︿範璺笂鐨勪竴绮掑皬绉嶅瓙锛屽笇鏈涙湁涓€澶╄兘鐢熸牴鍙戣娊锛岄暱鎴愪竴妫靛ぇ鏍戙€傚笇鏈涗笌澶у鍒嗕韩馃榿瀵瑰緟鎴戜滑锛屽綋鎴戜滑鐩搁亣鏃讹紝鎴戜滑宸茬粡鏈夋墍鎴愬氨銆?/p>