1. 程式人生 > >執行緒池ExecutorService

執行緒池ExecutorService

             執行緒池:  任務提交到執行緒池,而不是直接交給某執行緒,執行緒池拿到任務後,它在內部找空閒的執行緒進行執行(封裝),任務是提交給執行緒池,一個執行緒只能執行一個任務,但可以同時向一個執行緒池提交多個任務。

               建立固定大小的執行緒池

               建立快取執行緒池

               如何實現執行緒死掉後重新啟動?

               答案:建立單一執行緒池Executors.newSingleThreadExecutor();

            關閉執行緒池

                      shutdown()  執行緒池中都處於空閒是結束執行緒池

                       shutdownNow()執行緒池不管是否有任務在執行都停止

例子:

//執行緒池
public class ThreadPool {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
Runnable command = new Runnable() {

@Override
public void run() {
System.out.println("1"+Thread.currentThread().getName());
          try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.shutdown();
}
}

輸出:

1pool-1-thread-1
1pool-1-thread-1
1pool-1-thread-1
1pool-1-thread-1
1pool-1-thread-1

都是一個執行緒在執行這些任務;在3s執行下一個

----------------------------------------------------------------------

執行緒池啟動定時器

  呼叫ScheduledExecutorService的schedule方法,返回的ScheduleFuture物件可以取消任務。

  支援間隔重複任務的定時方式,不直接支援絕對定時方式,需要轉換成相對時間方式。

   Executors.newSchdeduledThreadPool(3).schedule  (....)