天天看點

線程池的簡單了解及使用

線程池的技術背景

1、線程的建立和銷毀很耗資源,重用線程池中的線程。減少因對象建立銷毀所帶來的性能開銷

2、有效控制線程的最大并發數,提高系統資源使用率,同時避免過多的資源競争,避免堵塞;

線程池架構Executor

Executor : 所有線程池的接口。 

ExecutorService:增加Executor的行為(執行execute,關閉shutdown),是Executor實作類的最直接接口。

Executors : 提供一系列的工廠方法(靜态方法),(直接調用)建立生成線程池。

eg:ExecutorService pool = Executors.newSingleThreadExecutor();

其中Executors生成的常見線程池可分為4類:

1、newSingleThreadExecutor

單個線程的線程池

2、newFixedThreadExecutor

固定數量線程池

3、newCacheThreadExecutor(推薦)

可緩存線程池,當線程池大小超過處理任務所需的線程,就會回收部分空閑線程。有任務來,又智能添加

4、newScheduleThreadExecutor

大小無限制線程池,支援定時和周期的執行線程

public class TestCachedThreadPool {
    public static void main(String[] args) {
        //建立一個可重用固定線程數的線程池
        ExecutorService pool = Executors.newCachedThreadPool();
        //建立實作了Runnable接口對象
        Thread t1 = new Thread ();
        Thread t2 = new Thread ();
        Thread t3 = new Thread ();
        Thread t4 = new Thread ();
        Thread t5 = new Thread ();
        //将線程放入池中進行執行
        pool.execute(t1);
        pool.execute(t2);
        pool.execute(t3);
        pool.execute(t4);
        pool.execute(t5);
        //關閉線程池
        pool.shutdown();
    }
}