线程池使用及优势

线程池的主要工作是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数超过了最大数量,超出数量的线程就需要排队等候,等待其他线程执行完毕

它的主要特点可以总结为: 线程复用 控制最大并发数 管理线程

线程池主要优势又如下三点:

Java中的线程池使通过 Executor 框架实现的,使用线程池用到了 Executor , Executors , ExecutorService , ThreadPoolExecutor 这几个类

其中 Executors 是一个工厂方法,提供了快捷创建线程池的方法,常用的线程池又如下几种:

通过查看这三个工厂方法的源码得知:

底层都是创建了 ThreadPoolExecutor 对象,该类的构造方法有7个参数:

线程池的工作流程如下:

当线程池中队列已满且工作线程达到最大数量时,线程池会拒绝新任务的提交直至队列出现空位或有空闲线程,对于拒绝的任务有不同的处理方式,称为拒绝策略。

线程池提供了四种拒绝策略:

以上拒绝策略均实现了 RejectedExecutionHandler 接口



  • 杞В鐮佺嚎绋嬩竴鑸垝鍏ュ摢绉绾跨▼姹
    绛旓細杞В鐮佺嚎绋嬩竴鑸垝鍏ユ牳蹇绾跨▼姹銆傝蒋瑙g爜浼樺娍锛氬叿鏈夋洿濂界殑閫傚簲鎬э紝杞欢瑙g爜涓昏鏄細鍗犵敤CUP鐨勮繍琛岋紝杞В涓嶈冭檻绀惧鐨勭‖浠惰В鐮佹敮鎸佹儏鍐碉紝鏈塁PU灏卞彲浠浣跨敤浜嗭紝浣嗘槸鍗犵敤浜嗘洿澶氱殑CUP閭e氨鎰忓懗鐫寰堣楄垂鎬ц兘锛屽緢鑰楃數锛屽湪璁惧鐢甸噺鍏呰冻鐨勬儏鍐典笅锛屾垨鑰呰澶囩‖浠惰В鐮佹敮鎸佷笉瓒崇殑鎯呭喌涓嬩娇鐢ㄨ蒋浠惰В鐮佹洿鍔犲ソ锛佺嚎绋嬫睜鍙互鎻愪緵...
  • tomcat鎬庝箞鏀寔1涓囧苟鍙
    绛旓細4. 闆嗙兢鍜岃礋杞藉潎琛★細Tomcat鏀寔闆嗙兢鍜岃礋杞藉潎琛$殑閮ㄧ讲鏂瑰紡銆傞氳繃鍦ㄥ鍙版湇鍔″櫒涓婇儴缃插涓猅omcat瀹炰緥锛屽苟浣跨敤璐熻浇鍧囪 鍣ㄦ潵鍒嗗彂璇锋眰锛屽彲浠ュ皢璐熻浇鍧囪 鍒颁笉鍚岀殑鏈嶅姟鍣ㄤ笂锛屾彁楂樻暣浣撶殑骞跺彂澶勭悊鑳藉姏銆傛澶栵紝杩樺彲浠ヨ繘琛屼竴浜涢澶栫殑浼樺寲鍜岃皟鏁存潵杩涗竴姝ユ彁楂楾omcat鐨勫苟鍙戝鐞嗚兘鍔涳紝渚嬪璋冩暣绾跨▼姹澶у皬銆佷紭鍖栦唬鐮侀昏緫銆佷娇鐢ㄧ紦瀛...
  • 鍦ㄨ繍钀ュ晢鏍稿績搴撴浛鎹㈡渚嬩笂,AntDB鏁版嵁搴撴湁鍝簺浜у搧浼樺娍?
    绛旓細1銆佲滅數淇$骇鈥濋珮鍙敤銆侀珮瀹夊叏銆佸己涓鑷村睘鎬?锛氬叿澶団滀竴涓诲浠庘濈殑闆嗙兢鍐呴儴楂樺彲鐢ㄥ垏鎹㈣兘鍔涳紝浼樿壇鐨勨滃鍦板涓績鈥濈伨澶囪兘鍔涳紝婊¤冻鈥滅數淇$骇鈥濄佲滈噾铻嶇骇鈥濇暟鎹畨鍏ㄥ拰寮轰竴鑷存ц姹傘2銆佹敮鎸侀珮骞跺彂锛岀郴缁熼珮鎬ц兘?锛氫骇鍝佸紩鍏绾跨▼姹/鍗忕▼妯″瀷锛屾敮鎸佺櫨涓囧苟鍙戣繛鎺ユ暟锛涘熀浜嶳DMA锛圧emote Direct Memory Access锛岃繙绋嬬洿鎺...
  • Java浼樺娍鏈夊摢浜?
    绛旓細11.java鏀寔澶绾跨▼锛岀畝鍗曠悊瑙o紝濡傛灉鏄崟鏍窩PU锛岄偅涔堜細閫氳繃鏃堕棿鐗囪疆杞殑鏂瑰紡锛屽绾跨▼鎵ц绋嬪簭锛屽鏋滄槸澶氭牳CPU锛岄偅涔堝氨鍙互鐞嗚В涓猴紝涓や釜鎴栧涓嚎绋嬪悓鏃惰繍琛屻備竴銆佸仛缃戠珯 Java鍙互鐢ㄦ潵鍋氱綉绔欙紝寰堝澶у瀷缃戠珯閮芥槸鐢↗ava鍐欑殑锛屾瘮濡傛垜浠啛鎮夌殑B绔欙紝鎵浠ユ兂瀛︿範Java鐨勫悓瀛﹁繕鍙互璐熻矗缃戠珯鏂归潰鐨勫埗浣滐紝杩欐柟闈㈢殑宀椾綅锛...
  • 浣跨敤Java鏋勯犻珮鍙墿灞搴旂敤
    绛旓細涓绉嶆洿鍔犲悎鐞嗙殑浣跨敤澶氱嚎绋嬬殑鏂规硶鏄浣跨敤绾跨▼姹(Thread Pool) ncurrent 鎻愪緵浜嗕竴涓伒娲荤殑绾跨▼姹犲疄鐜 Executor 妗嗘灦 杩欎釜妗嗘灦鍙互鐢ㄤ簬寮傛浠诲姟鎵ц 鑰屼笖鏀寔寰堝涓嶅悓绫诲瀷鐨勪换鍔℃墽琛岀瓥鐣 瀹冭繕涓轰换鍔℃彁浜ゅ拰浠诲姟鎵ц涔嬮棿鐨勮В鑰︽彁渚涗簡鏍囧噯鐨勬柟娉 涓轰娇鐢 Runnable 鎻忚堪浠诲姟鎻愪緵浜嗛氱敤鐨勬柟寮 Executor 鐨勫疄鐜拌繕鎻愪緵浜嗗鐢熷懡鍛ㄦ湡鐨...
  • Java涓璶io涓庢櫘閫歩o鏈変粈涔浼樺娍?
    绛旓細绾跨▼閫氬父灏嗛潪闃诲IO鐨勭┖闂叉椂闂寸敤浜庡湪鍏跺畠閫氶亾涓婃墽琛孖O鎿嶄綔锛屾墍浠ヤ竴涓崟鐙殑绾跨▼鐜板湪鍙互绠$悊澶氫釜杈撳叆鍜岃緭鍑洪氶亾锛坈hannel锛夈傞夋嫨鍣紙Selectors锛塉ava NIO鐨勯夋嫨鍣ㄥ厑璁镐竴涓崟鐙殑绾跨▼鏉ョ洃瑙嗗涓緭鍏ラ氶亾锛屼綘鍙互娉ㄥ唽澶氫釜閫氶亾浣跨敤涓涓夋嫨鍣紝鐒跺悗浣跨敤涓涓崟鐙殑绾跨▼鏉モ滈夋嫨鈥濋氶亾锛氳繖浜涢氶亾閲屽凡缁忔湁鍙互澶勭悊鐨...
  • 鍋囨湡Java鑷鏁欑▼
    绛旓細java鏈夐潪甯稿箍娉涚殑搴旂敤甯傚満,瀹冪殑鐢熸佺郴缁熷嚑涔庢兜鐩栦簡鐩墠甯傞潰涓婃墍鏈夌殑杞‖浠,iava鍑犱箮鏄竾鑳界殑,浣犺兘鎯冲埌鐨,java鍩烘湰閮借兘瀹炵幇 (铏界劧鍚圭殑鏈夌偣澶,浣嗕笉鍙惁璁)銆 web寮鍙 鑳藉仛澶у瀷鐨勪簰鑱旂綉缃戠珯濡,浜笢,娣樺疂,浜轰汉缃戙佸幓鍝効缃戙佺編鍥㈢瓑銆 java鍦ㄥ紑鍙戦珮璁块棶銆侀珮骞跺彂銆侀泦缇ゅ寲鐨勫ぇ鍨嬬綉绔欐柟闈㈡湁寰堝ぇ鐨浼樺娍銆 绉诲姩绔紑鍙 鐩...
  • webshpere鍜孞BOSS鍜宼omcat鍚勮嚜鍝簺鐗圭偣鍜屼紭鍔
    绛旓細JBoss Web鏃㈠彲鍗曠嫭杩愯锛屼篃鍙棤缂濆祵鍏Boss搴旂敤鏈嶅姟鍣紝鎴愪负JBoss涓棿浠跺钩鍙扮殑涓閮ㄥ垎銆備笉浠呭悗鍙版湇鍔¤皟鐢ㄧ殑鎬ц兘灏嗗緱浠ユ彁鍗囷紝涔熷彲鍒╃敤浠ヤ笅JBoss骞冲彴鐨勭壒鎬ф彁鍗嘩eb搴旂敤鍔熻兘锛氬熀浜嶫Groups鐨勫绉嶉泦缇ゆ柟妗堢殑鏀寔 鍩轰簬Arjuna鎶鏈殑JTA鍜孞TS鐨勪簨鍔″鐞嗘敮鎸 浼樺寲鐨绾跨▼姹犲拰杩炴帴姹犵殑鏀寔 鍩轰簬JMX 鎺у埗鍙扮殑鍩烘湰绠$悊鏀寔鍜...
  • 鏈嶅姟鍖栨灦鏋勭殑鍒嗗竷寮忎簨鍔¢棶棰樼敤浠涔堟柟娉曡В鍐?
    绛旓細Reactor绾跨▼璋冨害妯″瀷鐨勫伐浣滃師鐞嗙ず鎰忓鍥1-3鎵绀恒傚浘1-3 楂樻ц兘鐨凴eactor绾跨▼璋冨害妯″瀷1.2 涓氬姟鏈浣冲疄璺佃淇濊瘉楂樻ц兘,鍗曚緷闈犲垎甯冨紡鏈嶅姟妗嗘灦鏄笉澶熺殑,杩橀渶瑕搴旂敤鐨勯厤鍚,搴旂敤鏈嶅姟鍖栭珮鎬ц兘瀹炶返鎬荤粨濡備笅:1) 鑳藉紓姝ョ殑灏藉彲鑳浣跨敤寮傛鎴栬呭苟琛屾湇鍔¤皟鐢,鎻愬崌鏈嶅姟鐨勫悶鍚愰噺,鏈夋晥闄嶄綆鏈嶅姟璋冪敤鏃跺欢銆2) 鏃犺鏄疦IO閫氫俊妗嗘灦鐨绾跨▼姹...
  • 浠涔堟槸鍗曚緥璁捐妯″紡
    绛旓細鍏跺疄杩樻湁涓ょ被:骞跺彂鍨嬫ā寮鍜岀嚎绋嬫睜妯″紡銆 鏈甯哥敤鐨勬槸:宸ュ巶妯″紡,鍗曚緥妯″紡,寤洪犺呮ā寮,浠g悊妯″紡銆 鍏跺疄閮戒簡瑙d竴涓嬫瘮杈冨ソ銆 闂鍗:璁捐妯″紡涓,灞炰簬缁撴瀯鍨嬫ā寮忕殑鏈夊摢浜 璁捐妯″紡涓昏鍒嗕笁涓被鍨:鍒涘缓鍨嬨佺粨鏋勫瀷鍜岃涓哄瀷銆 鍏朵腑鍒涘缓鍨嬫湁: 涓銆丼ingleton,鍗曚緥妯″紡:淇濊瘉涓涓被鍙湁涓涓疄渚,骞舵彁渚涗竴涓闂畠鐨...
  • 扩展阅读:为什么不建议用线程池 ... 线程池使用代码案例 ... 如何正确使用线程池 ... 为什么不建议用多线程 ... 创建线程池的四种方法 ... java线程池的七个参数 ... 为什么要使用线程池 ... 线程池爆满了怎么办 ... 线程池参数最佳设置 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网