java如何确定线程池最多线程的大小 java如何写一个线程池(线程池大小可定义为3),

java\u7ebf\u7a0b\u6c60\u5982\u4f55\u5408\u7406\u7684\u8bbe\u7f6e\u5927\u5c0f

\u6700\u4f73\u7ebf\u7a0b\u6570\u76ee = \uff08\uff08\u7ebf\u7a0b\u7b49\u5f85\u65f6\u95f4+\u7ebf\u7a0bCPU\u65f6\u95f4\uff09/\u7ebf\u7a0bCPU\u65f6\u95f4 \uff09* CPU\u6570\u76ee
\u6bd4\u5982\u5e73\u5747\u6bcf\u4e2a\u7ebf\u7a0bCPU\u8fd0\u884c\u65f6\u95f4\u4e3a0.5s\uff0c\u800c\u7ebf\u7a0b\u7b49\u5f85\u65f6\u95f4\uff08\u975eCPU\u8fd0\u884c\u65f6\u95f4\uff0c\u6bd4\u5982IO\uff09\u4e3a1.5s\uff0cCPU\u6838\u5fc3\u6570\u4e3a8\uff0c\u90a3\u4e48\u6839\u636e\u4e0a\u9762\u8fd9\u4e2a\u516c\u5f0f\u4f30\u7b97\u5f97\u5230\uff1a((0.5+1.5)/0.5)*8=32\u3002\u8fd9\u4e2a\u516c\u5f0f\u8fdb\u4e00\u6b65\u8f6c\u5316\u4e3a\uff1aview sourceprint?
\u6700\u4f73\u7ebf\u7a0b\u6570\u76ee = \uff08\u7ebf\u7a0b\u7b49\u5f85\u65f6\u95f4\u4e0e\u7ebf\u7a0bCPU\u65f6\u95f4\u4e4b\u6bd4 + 1\uff09* CPU\u6570\u76ee
\u53ef\u4ee5\u5f97\u51fa\u4e00\u4e2a\u7ed3\u8bba\uff1a
\u7ebf\u7a0b\u7b49\u5f85\u65f6\u95f4\u6240\u5360\u6bd4\u4f8b\u8d8a\u9ad8\uff0c\u9700\u8981\u8d8a\u591a\u7ebf\u7a0b\u3002\u7ebf\u7a0bCPU\u65f6\u95f4\u6240\u5360\u6bd4\u4f8b\u8d8a\u9ad8\uff0c\u9700\u8981\u8d8a\u5c11\u7ebf\u7a0b\u3002

\u6df1\u5165\u4e86\u89e3\u7ebf\u7a0b\u6c60\u7684\u4f5c\u7528\u4ee5\u53ca\u91cd\u8981\u6027

new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler);

参数:

corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程。
runnableTaskQueue(任务队列):用于保存等待执行的任务的阻塞队列。 可以选择以下几个阻塞队列。
ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列。
SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
PriorityBlockingQueue:一个具有优先级的无限阻塞队列。
maximumPoolSize(线程池最大大小):线程池允许创建的最大线程数。如果队列满了,并且已创建的线程数小于最大线程数,则线程池会再创建新的线程执行任务。值得注意的是如果使用了无界的任务队列这个参数就没什么效果。
ThreadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。
RejectedExecutionHandler(饱和策略):当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务。这个策略默认情况下是AbortPolicy,表示无法处理新任务时抛出异常。以下是JDK1.5提供的四种策略。
AbortPolicy:直接抛出异常。
CallerRunsPolicy:只用调用者所在线程来运行任务。
DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
DiscardPolicy:不处理,丢弃掉。
当然也可以根据应用场景需要来实现RejectedExecutionHandler接口自定义策略。如记录日志或持久化不能处理的任务。
keepAliveTime(线程活动保持时间):线程池的工作线程空闲后,保持存活的时间。所以如果任务很多,并且每个任务执行的时间比较短,可以调大这个时间,提高线程的利用率。
TimeUnit(线程活动保持时间的单位):可选的单位有天(DAYS),小时(HOURS),分钟(MINUTES),毫秒(MILLISECONDS),微秒(MICROSECONDS, 千分之一毫秒)和毫微秒(NANOSECONDS, 千分之一微秒)。

  • Java绾跨▼:鏂扮壒寰-绾跨▼姹
    绛旓細Sun鍦Java 涓瀵Java绾跨▼鐨勭被搴撳仛浜嗗ぇ閲忕殑鎵╁睍 鍏朵腑绾跨▼姹灏辨槸Java 鐨鏂扮壒寰佷箣涓 闄や簡绾跨▼姹犱箣澶 杩樻湁寰堝澶氱嚎绋鐩稿叧鐨勫唴瀹 涓哄绾跨▼鐨勭紪绋嬪甫鏉ヤ簡鏋佸ぇ渚垮埄 涓轰簡缂栧啓楂樻晥绋冲畾鍙潬鐨勫绾跨▼绋嬪簭 绾跨▼閮ㄥ垎鐨勬柊澧炲唴瀹规樉寰楀挨涓洪噸瑕 鏈夊叧Java 绾跨▼鏂扮壒寰佺殑鍐呭鍏ㄩ儴鍦╪current涓嬮潰 閲岄潰鍖呭惈鏁扮洰浼楀鐨勬帴鍙e拰绫 鐔熸倝杩欓儴鍒咥PI鐗瑰緛...
  • Java濡備綍渚濇嵁cpu鏍告暟璁剧疆鍚堥傜殑绾跨▼鏁
    绛旓細1锛氳幏鍙朿pu鏍稿績鏁帮細Runtime.getRuntime().availableProcessors(); 鍒涘缓绾跨▼姹锛欵xecutors.newFixedThreadPool(nThreads);//nThreads涓虹嚎绋嬫暟2锛氳繖涓彧瑕佹湇鍔″櫒鍐呭瓨澶熷ぇ锛孋PU鏍稿績鏁拌緝澶氾紝澶勭悊鏁版嵁姣旇緝寮哄氨濂戒簡锛屾敞鎰忎笉瑕佷竴涓嬪垎閰嶅嚑鍗冧釜绾跨▼锛屽彲 鑳戒細瀵艰嚧鍫嗘爤婧㈠嚭鐨勶紝杩欐牱绋嬪簭灏辨寕浜嗭紝鍥犱负绾跨▼寰堣垂鍐呭瓨璧勬簮...
  • java 涓 濡備綍璁╀竴涓柟娉曞唴鏈澶鍙兘鏈変袱涓绾跨▼璁块棶
    绛旓細淇″彿閲廠emaphore銆備笅闈唬鐮侀噷锛屼竴涓猻emp鐨勪俊鍙烽噺鍒濆鍊间负5锛.acquire()涓娆-1锛.release()涓娆+1锛屽鏋滀俊鍙烽噺鍊间负0鐨勬椂鍊.acquire()灏变細闃诲绾跨▼锛岀洿鍒板埆鐨勭嚎绋.release()銆備笅闈㈢殑瀹炰緥鏄厑璁鏈澶5涓嚎绋嬪悓鏃惰闂.acquire()鍜.release()涔嬮棿鐨勪唬鐮侊紝浣犺缃垵濮嬪间负2灏卞彲浠ヤ簡銆俻ublic class Semaphore...
  • Java 绾跨▼姹鐨勯棶棰
    绛旓細浣犵殑鐞嗚В娌℃瘺鐥呫傛牳蹇冪嚎绋嬫暟(corePoolSize锛夛細鏍稿績绾跨▼浼氫竴鐩村瓨娲伙紝鍗充娇娌℃湁浠诲姟闇瑕佸鐞嗐傚綋绾跨▼鏁板皬浜庢牳蹇冪嚎绋嬫暟鏃讹紝鍗充娇鐜版湁鐨勭嚎绋嬬┖闂诧紝绾跨▼姹涔熶細浼樺厛鍒涘缓鏂扮嚎绋嬫潵澶勭悊浠诲姟锛岃屼笉鏄洿鎺ヤ氦缁欑幇鏈夌殑绾跨▼澶勭悊銆傛渶澶х嚎绋嬫暟锛坢axPoolSize锛夛細褰撶嚎绋嬫暟澶т簬鎴栫瓑浜庢牳蹇冪嚎绋嬶紝涓斾换鍔¢槦鍒楀凡婊℃椂锛岀嚎绋嬫睜浼氬垱寤烘柊...
  • Java澶氱嚎绋鍜屽崟绾跨▼鎬庝箞閫氫織鏄撴噦鐨勭悊瑙?
    绛旓細绾跨▼姹浣滀负楂樼骇宸ュ叿锛岄氳繃Executors绫荤畝鍖栦簡绾跨▼绠$悊锛屾彁楂樹簡鎬ц兘銆傜嚎绋嬫睜鍙互璁剧疆鍥哄畾澶у皬锛屾帶鍒跺苟鍙戦噺锛岀‘淇濊祫婧愮殑鍚堢悊鍒嗛厤銆傛澶栵紝ThreadGroup鍜岀嚎绋嬮氫俊鏂规硶锛堝Object绫绘彁渚涚殑wait(), notify()绛夛級鍦ㄥ鐞嗙嚎绋嬬粍鍜岀嚎绋嬮棿鐨勫崗浣滀腑璧峰埌鍏抽敭浣滅敤銆傛荤殑鏉ヨ锛Java鐨勫绾跨▼鍜屽崟绾跨▼灏卞儚宸ュ巶涓殑涓嶅悓宸ヤ綔妯″紡锛...
  • java 绾跨▼姹涓璫orepoolsize=5 maximumpoolsize=5,鏈澶у彲瀛樻斁绾跨▼鎬庝箞鏄...
    绛旓細搴旇鏄5涓紝corepoolsize=5鍒濆绌洪棽绾跨▼5涓紝maximumpoolsize=5鏈澶х嚎绋嬫暟涓5
  • java甯哥敤鐨勫嚑绉绾跨▼姹瀹炰緥璁茶В
    绛旓細涓嬮潰缁欎綘浠嬬粛4绉绾跨▼姹锛1銆乶ewCachedThreadPool锛氬簳灞傦細杩斿洖ThreadPoolExecutor瀹炰緥锛宑orePoolSize涓0锛沵aximumPoolSize涓篒nteger.MAX_VALUE锛沰eepAliveTime涓60L锛泆nit涓篢imeUnit.SECONDS锛泈orkQueue涓篠ynchronousQueue(鍚屾闃熷垪)閫氫織锛氬綋鏈夋柊浠诲姟鍒版潵锛屽垯鎻掑叆鍒癝ynchronousQueue涓紝鐢变簬SynchronousQueue鏄悓姝ラ槦鍒楋紝...
  • 浠涔堟槸java绾跨▼姹?
    绛旓細鎵剧殑璧勬枡锛屼綘鐪嬩竴涓嬪惂锛歕x0d\x0a澶氱嚎绋鎶鏈富瑕佽В鍐冲鐞嗗櫒鍗曞厓鍐呭涓嚎绋嬫墽琛岀殑闂锛屽畠鍙互鏄捐憲鍑忓皯澶勭悊鍣ㄥ崟鍏冪殑闂茬疆鏃堕棿锛屽鍔犲鐞嗗櫒鍗曞厓鐨勫悶鍚愯兘鍔涖俓x0d\x0a \x0d\x0a 鍋囪涓涓湇鍔″櫒瀹屾垚涓椤逛换鍔℃墍闇鏃堕棿涓猴細T1 鍒涘缓绾跨▼鏃堕棿锛孴2 鍦ㄧ嚎绋嬩腑鎵ц浠诲姟鐨勬椂闂达紝T3 閿姣佺嚎绋嬫椂闂淬俓x0d...
  • java绾跨▼姹ExecutorService,閲岄潰鏈夊灏戠┖浣欑嚎绋,鎬庝箞鐪
    绛旓細涓嶇煡閬撲綘浣跨敤鐨勬槸鍝釜绾跨▼姹锛屽鏋滄槸鍥哄畾绾跨▼姹狅紝鍙互杩欎箞鍐 ThreadPoolExecutor pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);pool.getActiveCount();//鑾峰彇娲诲姩鐨勭嚎绋嬫暟閲 10-娲诲姩鏁伴噺灏辨槸绌洪棽鏁伴噺
  • Java瀹炵幇閫氱敤绾跨▼姹
    绛旓細绾跨▼姹閫氫織鐨勬弿杩板氨鏄鍏堝垱寤鸿嫢骞茬┖闂茬嚎绋 绛夊埌闇瑕佺敤澶氱嚎绋鍘诲鐞嗕簨鍔$殑鏃跺欏幓鍞ら啋鏌愪簺绌洪棽绾跨▼鎵ц澶勭悊浠诲姟 杩欐牱灏辩渷鍘讳簡棰戠箒鍒涘缓绾跨▼鐨勬椂闂 鍥犱负棰 绻佸垱寤虹嚎绋嬫槸瑕佽楄垂澶ч噺鐨凜PU璧勬簮鐨 濡傛灉涓涓簲鐢ㄧ▼搴忛渶瑕侀绻佸湴澶勭悊澶ч噺骞跺彂浜嬪姟 涓嶆柇鐨勫垱寤洪攢姣佺嚎绋嬪線寰浼氬ぇ澶у湴闄嶄綆绯荤粺鐨勬晥鐜 杩欐椂鍊欑嚎绋嬫睜灏辨淳 涓婄敤鍦轰簡 鏈枃...
  • 扩展阅读:java线程池配置参数 ... 创建线程池的四种方法 ... java线程池的七个参数 ... java多线程并发面试题 ... java ... java线程池面试题 ... 为什么不建议用线程池 ... 为什么不建议用多线程 ... java如何正确使用线程池 ...

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