線程池的技術背景
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();
}
}