1. 程式人生 > 其它 >簡單明瞭Java執行緒池

簡單明瞭Java執行緒池

執行緒池

執行緒池從功能上來看,就是一個工作管理員。在Java中,Executor介面是執行緒池的根介面,其中只包含一個方法:

  void execute(Runnable command);  // 執行任務

ExecutorService繼承了Executor介面,提供了一些執行緒池的基礎方法:

  void shutdown(); 		// 關閉執行緒池(不接受新任務,但是舊任務會執行)
  List<Runnable> shutdownNow(); 	// 關閉執行緒池,返回待執行任務
  boolean isShutdown(); 	// 執行緒池是否會關閉
  boolean isTerminated(); 	// 關閉之前所有任務是否被關閉。(必須先執行過shutdown)
  ....

再往下是兩種執行緒池的實現:ThreadPoolExecutor和ForkJoinPool。ThreadPoolExecutor中維護了一個BlockingQueue阻塞佇列儲存所有的待執行任務,而ForkJoinPool中每一個執行緒都有自己的BlockingQueue用來儲存任務。

ThreadPoolExecutor

在ThreadPoolExecutor的構造方法中,需要提供幾個引數:corePoolSize、maximumPoolSize、keepAliveTime、BlockingQueue、RejectedExecutionHandler。其中corePoolSize表示當前執行緒池維護幾個執行緒,maximumPoolSize表示允許的最大執行緒數。keepAliveTime表示如果當前執行緒數在
corePoolSize和maximumPoolSize之間時,允許在多久時間內保持存活等待新任務。BlockingQueue是儲存任務的阻塞佇列,RejectedExecutionHandler是不同的拒絕策略。

    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              RejectedExecutionHandler handler) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), handler);
    }
  • 那麼ThreadPoolExecutor中是如何建立新執行緒呢?