1. 主页 > 小妙招

Java线程池实战:5种常见线程启动方式对比

"浣犵殑Java绋嬪簭鏄笉鏄秺璺戣秺鎱紵鍗″緱璺熻€佺埛杞︿技鐨勶紵" 绋嬪簭鍛樿€佸紶鐩潃鐩戞帶澶у睆鐩存媿澶ц吙銆備粖澶╁挶浠氨鎺版壇娓呮杩欎釜璁╀唬鐮佷粠涔岄緹鍙樼寧璞圭殑绉樿瘈鈥斺€斾簲绉嶇嚎绋嬪惎鍔ㄥЭ鍔垮ぇ涔辨枟锛?/p>


馃毃 鏂版墜蹇呯湅锛氱嚎绋嬫睜瀛樺湪鐨勬剰涔?/h3>

涓句釜鐪熷疄妗堜緥锛氬幓骞存煇鐢靛晢鍙屽崄涓€锛屾湁涓劊澶撮潚鐢═hread鐩存帴new浜?000涓嚎绋嬫姠浼樻儬鍒革紝缁撴灉鏈嶅姟鍣ㄧ洿鎺ュ師鍦扮垎鐐革紒绾跨▼姹犵殑浣滅敤灏卞儚楂橀€熷叕璺敹璐圭珯鈥斺€斺€?strong>鈥嬫帶鍒惰溅娴侀槻姝㈠牭姝烩€?/strong>鈥嬨€?/p>


鈿旓笍 鎷涘紡涓€锛歍hread鐩寸敺寮忓惎鍔?/h3>
java澶嶅埗
new Thread(() -> {
    System.out.println("绠€鍗曠矖鏆翠絾瀹规槗缈昏溅");
}).start();

浼樼偣锛氬辜鍎垮洯灏忔湅鍙嬮兘浼氱敤
缂虹偣锛氣€?strong>鈥嬬敤瀹屽氨鎵斾笉鐜繚鈥?/strong>鈥嬶紝鍒涘缓閿€姣佸紑閿€澶у緱鍍忕儳閽?br/> 閫傚悎鍦烘櫙锛氫复鏃舵祴璇曠敤锛堝氨鍍忔场闈紝搴旀€ヤ絾涓嶈兘褰撻キ鍚冿級


馃す 鎷涘紡浜岋細Runnable鎵撳伐榄?/h3>
java澶嶅埗
Runnable task = () -> System.out.println("鐏垫椿灏变笟鍏歌寖");
new Thread(task).start();

馃憠 鐏甸瓊鎷烽棶锛氳繖鍜孴hread鏈変粈涔堝尯鍒紵
绛旓細鐩稿綋浜庢妸"鍋氫粈涔?鍜?鎬庝箞鍋?鍒嗗紑鈥斺€斺€?strong>鈥婻unnable鏄伐浣滃唴瀹光€?/strong>鈥嬶紝Thread鏄墦宸ヤ汉锛岃繖涓璁″鍟婏紒


馃幁 鎷涘紡涓夛細Future+Callable鏂囪壓娲?/h3>
java澶嶅埗
FutureTask future = new FutureTask<>(() -> 42);
new Thread(future).start();
System.out.println("缁堟瀬绛旀锛? + future.get());

鉁?浜偣锛氳兘鎷胯繑鍥炲€硷紒閫傚悎闇€瑕佺煡閬撶粨鏋滅殑鍦烘櫙锛堟瘮濡傝绠楀伐璧勶級
鍧戠偣锛歠uture.get()浼氶樆濉炰富绾跨▼锛岀敤涓嶅ソ灏卞彉鎴愬崟绾跨▼


馃Ж 鍥涚Executors宸ュ叿瀵规瘮锛堥檮缈昏溅璁板綍锛?/h3>
鍒涘缓鏂瑰紡鐗圭偣缈昏溅姒傜巼鐪熷疄浜嬫晠妗堜緥
newCachedThreadPool绾跨▼鏁板脊鎬т几缂?/td>馃専馃専馃専馃専鏌愮ぞ浜pp娑堟伅闃熷垪绉帇10涓囨潯
newFixedThreadPool鍥哄畾绾跨▼鏁?/td>馃専馃専鏁版嵁搴撹繛鎺ユ睜鎾戠垎
newSingleThreadExecutor鍗曠嚎绋嬫帓闃?/td>馃専璁㈠崟瓒呮椂琚彇娑?/td>
newScheduledThreadPool瀹氭椂浠诲姟馃専馃専馃専淇冮攢娲诲姩鏃堕棿閿欎贡

鍘诲勾鐢╪ewCachedThreadPool澶勭悊鍥剧墖涓婁紶锛岀粨鏋滅敤鎴蜂紶浜?0涓囧紶琛ㄦ儏鍖咃紝鐩存帴鍐呭瓨婧㈠嚭鈥斺€旇娉暀璁晩锛?/p>


馃敡 鎷涘紡浜旓細ThreadPoolExecutor鎵嬭壓浜?/h3>
java澶嶅埗
ThreadPoolExecutor executor = new ThreadPoolExecutor(
    5, // 鏍稿績宸ヤ汉
    10, // 涓存椂宸ヤ笂闄?/span>
    60L, TimeUnit.SECONDS, // 涓存椂宸ヤ笅鐝椂闂?/span>
    new ArrayBlockingQueue<>(100) // 浠诲姟绛夊€欏尯
);

馃挕 鐙閰嶇疆绉樼睄锛?/p>

  • 鏍稿績绾跨▼鏁?= CPU鏍告暟 * 2
  • 鏈€澶ч槦鍒楅暱搴?= 棰勮宄板€艰姹傞噺 * 1.2
  • 鎷掔粷绛栫暐閫塁allerRunsPolicy锛堣璋冪敤绾跨▼鑷繁骞叉椿锛?/li>

馃尠 瀹炴垬妗堜緥锛?2306鐨勭嚎绋嬫睜鏅烘収

2019骞存槬杩愶紝鏌愯溅绔欒嚜鍔╁彇绁ㄦ満鐢‵ixedThreadPool锛岃缃渶澶х嚎绋?00銆傜粨鏋滈亣鍒拌韩浠借瘉璇嗗埆鎱㈢殑鎯呭喌锛岄槦鍒楀爢绉?涓囦换鍔″鑷村唴瀛樻孩鍑恒€傚悗鏉ユ敼鎴愬姩鎬佽皟鏁寸瓥鐣ワ細

  1. 鏍稿績绾跨▼鏁版牴鎹綉缁滃欢杩熻嚜鍔ㄨ皟鏁?/li>
  2. 闃熷垪鏀圭敤鍚屾绉讳氦闃熷垪
  3. 澧炲姞闄嶇骇绛栫暐锛堣秴杩囨壙杞介噺鐩存帴璺宠浆浜哄伐绐楀彛锛?/li>

馃殌 涓汉瑙佽В锛堟潵鑷绾跨▼姹犺檺杩?骞寸殑鑰佺爜鍐滐級

鐜板湪閮?023骞翠簡锛岃繕鍦ㄧ敤Executors鐨勮嚜鍔ㄥ垱寤烘柟娉曪紵閭e氨鍍忓紑鎵嬪姩鎸¤窇杞︹€斺€斾笉鏄笉琛岋紝浣嗗鏄撶唲鐏紒鈥?strong>鈥嬫墜鍔ㄩ厤缃甌hreadPoolExecutor鎵嶆槸鐜嬮亾鈥?/strong>鈥嬶紝鐗瑰埆鏄粨鍚圫pring鐨凘Async娉ㄨВ锛岀埥鍒伴璧凤紒

涓嬫鍜变滑鑱婅亰濡備綍鐢ㄧ嚎绋嬫睜瀹炵幇"鍛ㄦ澃浼︽紨鍞变細闂ㄧエ绉掓潃绯荤粺"锛屼繚璇佽浣犱唬鐮佺殑QPS锛堟瘡绉掓煡璇㈢巼锛変粠涓や綅鏁扮洿鎺ラ鍒颁簲浣嶆暟锛佺瓑绛夛紝杩欓噷鏈変釜鍧戯紒涓嬪洖鍒嗚В...

本文由嘻道妙招独家原创,未经允许,严禁转载