Executor提供了4種線程池:緩存
一、FixedThreadPool:建立一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待。併發
二、SingleThreadExecutor : 單個線程的線程池,它只會用惟一的工做線程來執行任務,保證全部任務按照指定順序(FIFO, LIFO, 優先級)執行。異步
三、newCachedThreadPool:可緩存線程池,若是線程池長度超過處理須要,可靈活回收空閒線程,若無可回收,則新建線程。適用於執行不少的短時間異步任務。ide
四、newScheduledThreadPool:支持週期性任務的線程池。spa
// 定長線程池 ExecutorService fixedPool = Executors.newFixedThreadPool(3); // 單個線程池 ExecutorService singlePool = Executors.newSingleThreadExecutor(); // 可緩存線程池 ExecutorService cachePool = Executors.newCachedThreadPool(); // 週期任務的線程池 ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(3); // 3秒後執行 scheduledPool.schedule(new Runnable() { @Override public void run() { System.out.println("Hello World"); } }, 1, TimeUnit.SECONDS); // 表示延遲1秒後每秒執行一次 scheduledPool.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("Hello World"); } }, 1, 1, TimeUnit.SECONDS);
Future接口:線程
Future接口和實現Future接口的FutureTask類用來表示異步計算的結果,當咱們把Runnable接口或Callable接口的實現類提交給ThreadPoolExecutor或ScheduledThreadPoolExecutor時,會向咱們返回一個FutureTask對象.code
// 週期任務的線程池 ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(3); // 3秒後執行 ScheduledFuture<?> future = scheduledPool.schedule(new Runnable() { @Override public void run() { System.out.println("Hello World"); } }, 1, TimeUnit.SECONDS); // 取消定時任務 future.cancel(false);