java Executor 線程池

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);
相關文章
相關標籤/搜索