摘要:系統(tǒng)預(yù)定了幾個(gè)線程池,不過(guò)建議手動(dòng)創(chuàng)建,以防止錯(cuò)誤創(chuàng)建消耗資源,比如創(chuàng)建太多線程或者固定線程數(shù)量,無(wú)界隊(duì)列固定線程數(shù)量,數(shù)量為,無(wú)界隊(duì)列,會(huì)按順序執(zhí)行不限制線程數(shù)量,使用隊(duì)列,使用于短任務(wù)基于用于周期性執(zhí)行任務(wù)示例第一個(gè)是,第二個(gè)是第一
系統(tǒng)預(yù)定了幾個(gè)線程池,不過(guò)建議手動(dòng)創(chuàng)建,以防止錯(cuò)誤創(chuàng)建消耗資源,比如創(chuàng)建太多線程或者OOM
FixedThreadPool固定線程數(shù)量,無(wú)界隊(duì)列
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueueSingleThreadExecutor()); }
固定線程數(shù)量,數(shù)量為1,無(wú)界隊(duì)列,會(huì)按順序執(zhí)行
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueueCachedThreadPool())); }
不限制線程數(shù)量,使用SynchronousQueue隊(duì)列,使用于短任務(wù)
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueueWorkStealingPool()); }
基于ForkJoinPool
public static ExecutorService newWorkStealingPool(int parallelism) { return new ForkJoinPool (parallelism, ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true); }ScheduledThreadPoolExecutor
用于周期性執(zhí)行任務(wù)
public static ScheduledExecutorService newSingleThreadScheduledExecutor() { return new DelegatedScheduledExecutorService (new ScheduledThreadPoolExecutor(1)); }示例
public class ScheduledDemo { static class Thread1 implements Runnable { @Override public void run() { SimpleDateFormat formater = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); System.out.println(Thread.currentThread().getName() + ":" + formater.format(new Date())); } } public static void main(String[] args) { ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1); //第一個(gè)是Runnable,第二個(gè)是第一次開(kāi)始的時(shí)間,第三個(gè)是周期時(shí)間,第四個(gè)是時(shí)間單位 schedule.scheduleAtFixedRate(new Thread1(),1000,1000, TimeUnit.MILLISECONDS); } }
運(yùn)行結(jié)果如下:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75723.html
摘要:是所有線程池實(shí)現(xiàn)的父類,我們先看看構(gòu)造函數(shù)構(gòu)造參數(shù)線程核心數(shù)最大線程數(shù)線程空閑后,存活的時(shí)間,只有線程數(shù)大于的時(shí)候生效存活時(shí)間的單位任務(wù)的阻塞隊(duì)列創(chuàng)建線程的工程,給線程起名字當(dāng)線程池滿了,選擇新加入的任務(wù)應(yīng)該使用什么策略,比如拋異常丟棄當(dāng)前 ThreadPoolExecutor ThreadPoolExecutor是所有線程池實(shí)現(xiàn)的父類,我們先看看構(gòu)造函數(shù) 構(gòu)造參數(shù) corePool...
摘要:接口用于提交任務(wù)接口繼承了接口設(shè)置線程的狀態(tài),還沒(méi)執(zhí)行的線程會(huì)被中斷設(shè)置線程的狀態(tài),嘗試停止正在進(jìn)行的線程當(dāng)調(diào)用或方法后返回為當(dāng)調(diào)用方法后,并且所有提交的任務(wù)完成后返回為當(dāng)調(diào)用方法后,成功停止后返回為當(dāng)前線程阻塞,直到線程執(zhí)行完時(shí)間到被中斷 Executor接口 void execute(Runnable command)//用于提交command任務(wù) ExecutorService接...
摘要:抽象類,實(shí)現(xiàn)了的接口。將任務(wù)封裝成提交任務(wù)主要方法在任務(wù)是否超時(shí)超時(shí)時(shí)間任務(wù)書(shū)用于存放結(jié)果的,先完成的放前面。 AbstractExecutorService抽象類,實(shí)現(xiàn)了ExecutorService的接口。 newTaskFor 將任務(wù)封裝成FutureTask protected RunnableFuture newTaskFor(Runnable runnable, T va...
摘要:定義等待該線程終止,比如線程調(diào)用了線程的,那么線程要等到線程執(zhí)行完后,才可以繼續(xù)執(zhí)行。 定義 等待該線程終止,比如A線程調(diào)用了B線程的join,那么A線程要等到B線程執(zhí)行完后,才可以繼續(xù)執(zhí)行。 示例 public class JoinDemo { static class JoinThread1 implements Runnable { Thread thre...
摘要:并且,線程池在某些情況下還能動(dòng)態(tài)調(diào)整工作線程的數(shù)量,以平衡資源消耗和工作效率。同時(shí)線程池還提供了對(duì)池中工作線程進(jìn)行統(tǒng)一的管理的相關(guān)方法。 開(kāi)發(fā)中經(jīng)常會(huì)遇到各種池(如:連接池,線程池),它們的作用就是為了提高性能及減少開(kāi)銷,在JDK1.5以后的java.util.concurrent包中內(nèi)置了很多不同使用場(chǎng)景的線程池,為了更好的理解它們,自己手寫(xiě)一個(gè)線程池,加深印象。 概述 1.什么是...
閱讀 2638·2021-11-25 09:43
閱讀 2739·2021-11-04 16:09
閱讀 1656·2021-10-12 10:13
閱讀 890·2021-09-29 09:35
閱讀 891·2021-08-03 14:03
閱讀 1784·2019-08-30 15:55
閱讀 3000·2019-08-28 18:14
閱讀 3502·2019-08-26 13:43