線程執行器 Executor (1)

Executor 是 java 5 帶進來的, 這套機制稱之爲執行框架,圍繞着 Executor 接口和它的子類接口 ExecutorService 以及實現這個兩個接口的
ThreadPoolExecutor展開的java

Executors 建立 執行器框架

ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();

方法:線程

executor.getPoolSize();           //返回線程池的大小

  executor.getActiveCount();        //返回正在執行的任務的線程數。

  executor.getCompletedTaskCount(); //返回已經完成的任務任務數。

  executor.getLargestPoolSize();    //返回曾同時位於線程池中的最大線程數。

  /*
  當即關閉。
  1.再也不執行那等待的線程
  2.返回等待執行的線程列表
  3.正在運行的線程將繼續運行
   */
  executor.shutdownNow();

  /*
    若是調用了shutdownNow() 或 shutdown() 方法 ,並執行器完成 關閉過程,將返回true
    表示線程池中已經要運行的任務了,也沒有等待的任務。
   */
  executor.isTerminated();

  /*
  若是調用了shutdown() 方法 ,將返回true
  可能,線程池中還有正在運行的任務,和等待的任務
   */
  executor.isShutdown();


 //將等線程池中已經提交的任務完成。會拒絕以後提交的任務,但正在運行的,和等待的任務將繼續
 executor.shutdown();

  //當前線程將阻塞5秒。等待線程池中的任務結束。有可能過了5秒後線程池中的任務也還未結束
//返回一個布爾值,true 表示與 isTerminated 的狀況同樣
  executor.awaitTermination(5, TimeUnit.SECONDS);
     

  //暫停線程池中的全部任務(包含正在執行中的任務和未執行的任務)。立刻關閉線程池
   executor.shutdownNow();

 

單個線程執行器code

executor = (ThreadPoolExecutor) Executors.newSingleThreadExecutor();

 

固定大小的執行器2接口

 

executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);

運行多個任務並處理第一個結果get

/*
 invokeAny 方法接收多個線程運行,並返回第一個完成任務而且沒有拋出異常的任務執行結果
 */
executor.invokeAny(Collections.emptyList());

 

運行多個任務,並處理全部結果it

//發送一個線程列表給執行器,並等待列表中全部任務執行完成。
  executor.invokeAll(Collections.emptyList());

 

延時執行任務io

ScheduledThreadPoolExecutor scheduledThreadPoolExecutor =
  (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(5); //線程池的大小爲5
scheduledThreadPoolExecutor.schedule(() -> { }, 1, TimeUnit.SECONDS);  //將延時一秒後執行任務。

若是想要在某個時間點執行,那就要本身去計算當前時間與要預期時間的差值class

 

週期性的執行任務List

 

scheduledThreadPoolExecutor.scheduleAtFixedRate(()->{},1,2,TimeUnit.SECONDS);

1 表示 任務將在 1秒後執行
2 表示 兩個任務執行間隔週期爲 2 秒
說明,雖然兩個任務的間隔爲 2 秒,但若是上一個線程的執行時間大於2秒。那麼就有可能存在兩個或多個線程並存

 

scheduledThreadPoolExecutor.scheduleWithFixedDelay(()->{},1,2,TimeUnit.SECONDS);

 

2 表示 上一個任務的結束時間 到下一個任務的開始時間的間隔。 說明,這個狀況下。就不會存在上一個任務與下一個任務並存的狀況

相關文章
相關標籤/搜索