創(chuàng)建線程池:
關(guān)系(看源碼):
????????????ThreadPoolExecutor ?extends AbstractExecutorService
? ??????????AbstractExecutorService implements ExecutorService
? ??????????ExecutorService extends Executor
ExecutorService executors =?new ThreadPoolExecutor(....)
executors.submit("Runable或者Callable"); //放入線程池 有返回結(jié)果
executors.execute("Runable")响蓉;//放入線程池 有返回結(jié)果
executors.shutdown();//關(guān)閉線程池
允許之前已經(jīng)提交但未執(zhí)行或未完成的任務(wù)繼續(xù)完成
executors.shutdownnow();//關(guān)閉線程池
阻止已經(jīng)提交(但尚未運行的)的任務(wù)運行并且嘗試停止正在運行的任務(wù)
CachedThreadPool
CachedThreadPool 是通過 java.util.concurrent.Executors 創(chuàng)建的 ThreadPoolExecutor 實例。這個實例會根據(jù)需要,在線程可用時肉渴,重用之前構(gòu)造好的池中線程。這個線程池在執(zhí)行?大量短生命周期的異步任務(wù)時(many short-lived asynchronous task)泡徙,可以顯著提高程序性能该肴。調(diào)用?execute?時,可以重用之前已構(gòu)造的可用線程障陶,如果不存在可用線程滋恬,那么會重新創(chuàng)建一個新的線程并將其加入到線程池中。如果線程超過 60 秒還未被使用抱究,就會被中止并從緩存中移除恢氯。因此,線程池在長時間空閑后不會消耗任何資源鼓寺。
Integer.MAX_VALUE =?2147483647
FixedThreadPool
FixedThreadPool 是通過 java.util.concurrent.Executors 創(chuàng)建的 ThreadPoolExecutor 實例勋拟。這個實例會復(fù)用?固定數(shù)量的線程?處理一個?共享的無邊界隊列?。任何時間點侄刽,最多有 nThreads 個線程會處于活動狀態(tài)執(zhí)行任務(wù)指黎。如果當(dāng)所有線程都是活動時朋凉,有多的任務(wù)被提交過來州丹,那么它會一致在隊列中等待直到有線程可用。如果任何線程在執(zhí)行過程中因為錯誤而中止杂彭,新的線程會替代它的位置來執(zhí)行后續(xù)的任務(wù)墓毒。所有線程都會一致存于線程池中,直到顯式的執(zhí)行 ExecutorService.shutdown() 關(guān)閉亲怠。
這里的核心線程數(shù)設(shè)置規(guī)則:
Runtime.getRuntime().availableProcessors() = Ncpu(cpu核數(shù))
IO密集型=2Ncpu ? ??計算密集型=Ncpu+1 ? ? (百度 io密集型和計算密集型)
純屬個人理解 ??
不理解或者是有什么錯誤的地方所计、歡迎留言并會及時回復(fù)和改正的