大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java高級架構師視頻教程,ExecutorService的使用

Java高級架構師視頻教程,ExecutorService的使用

更新時間:2020-03-27 12:09:59 來源:動力節點 瀏覽2277次

ExecutorService是java中的一個異步執行的框架,通過使用ExecutorService可以方便的創建多線程執行環境。

  本文將會詳細的講解ExecutorService的具體使用。

Java高級架構師視頻教程,ExecutorService的使用

  創建ExecutorService

  通常來說有兩種方法來創建ExecutorService。

  第一種方式是使用Executors中的工廠類方法,例如:

  ExecutorServiceexecutor=Executors.newFixedThreadPool(10);

  除了newFixedThreadPool方法之外,Executors還包含了很多創建ExecutorService的方法。

  第二種方法是直接創建一個ExecutorService,因為ExecutorService是一個interface,我們需要實例化ExecutorService的一個實現。

  這里我們使用ThreadPoolExecutor來舉例:

  ExecutorServiceexecutorService=

  newThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,

  newLinkedBlockingQueue<Runnable>());

  為ExecutorService分配Tasks

  ExecutorService可以執行Runnable和Callable的task。其中Runnable是沒有返回值的,而Callable是有返回值的。我們分別看一下兩種情況的使用:

  RunnablerunnableTask=()->{
  try{
  TimeUnit.MILLISECONDS.sleep(300);
  }catch(InterruptedExceptione){
  e.printStackTrace();
  }
  };
  Callable<String>callableTask=()->{
  TimeUnit.MILLISECONDS.sleep(300);
  return"Task'sexecution";
  };

  將task分配給ExecutorService,可以通過調用xecute(),submit(),invokeAny(),invokeAll()這幾個方法來實現。

  execute()返回值是void,他用來提交一個Runnabletask。

  executorService.execute(runnableTask);

  submit()返回值是Future,它可以提交Runnabletask,也可以提交Callabletask。提交Runnable的有兩個方法:

  <T>Future<T>submit(Runnabletask,Tresult);

  Future<?>submit(Runnabletask);

  第一個方法在返回傳入的result。第二個方法返回null。

  再看一下callable的使用:

  Future<String>future=

  executorService.submit(callableTask);

  invokeAny()將一個task列表傳遞給executorService,并返回其中的一個成功返回的結果。

  Stringresult=executorService.invokeAny(callableTasks);

  invokeAll()將一個task列表傳遞給executorService,并返回所有成功執行的結果:

  List<Future<String>>futures=executorService.invokeAll(callableTasks);

  關閉ExecutorService

  如果ExecutorService中的任務運行完畢之后,ExecutorService不會自動關閉。它會等待接收新的任務。如果需要關閉ExecutorService,我們需要調用shutdown()或者shutdownNow()方法。

  shutdown()會立即銷毀ExecutorService,它會讓ExecutorServic停止接收新的任務,并等待現有任務全部執行完畢再銷毀。

  executorService.shutdown();

  shutdownNow()并不保證所有的任務都被執行完畢,它會返回一個未執行任務的列表:

  List<Runnable>notExecutedTasks=executorService.shutdownNow();

  oracle推薦的最佳關閉方法是和awaitTermination一起使用: 

executorService.shutdown();
  try{
  if(!executorService.awaitTermination(800,TimeUnit.MILLISECONDS)){
  executorService.shutdownNow();
  }
  }catch(InterruptedExceptione){
  executorService.shutdownNow();
  }

先停止接收任務,然后再等待一定的時間讓所有的任務都執行完畢,如果超過了給定的時間,則立刻結束任務。

  Future

  submit()和invokeAll()都會返回Future對象。之前的文章我們已經詳細講過了Future。這里就只列舉一下怎么使用:

  Future<String>future=executorService.submit(callableTask);

  Stringresult=null;

  try{

  result=future.get();

  }catch(InterruptedException|ExecutionExceptione){

  e.printStackTrace();

  }

  ScheduledExecutorService

  ScheduledExecutorService為我們提供了定時執行任務的機制。

  我們這樣創建ScheduledExecutorService:

  ScheduledExecutorServiceexecutorService

  =Executors.newSingleThreadScheduledExecutor();

  executorService的schedule方法,可以傳入Runnable也可以傳入Callable:

  Future<String>future=executorService.schedule(()->{

  //...

  return"Helloworld";

  },1,TimeUnit.SECONDS);

  ScheduledFuture<?>scheduledFuture=executorService.schedule(()->{

  //...

  },1,TimeUnit.SECONDS);

  還有兩個比較相近的方法:

  scheduleAtFixedRate(Runnablecommand,longinitialDelay,longperiod,TimeUnitunit)

  scheduleWithFixedDelay(Runnablecommand,longinitialDelay,longdelay,TimeUnitunit)

  兩者的區別是前者的period是以任務開始時間來計算的,后者是以任務結束時間來計算。

  ExecutorService和Fork/Join

  java7引入了Fork/Join框架。那么兩者的區別是什么呢?

  ExecutorService可以由用戶來自己控制生成的線程,提供了對線程更加細粒度的控制。而Fork/Join則是為了讓任務更加快速的執行完畢。

Java高級架構師視頻教程,ExecutorService的使用

  以上就是動力節點java培訓機構的小編針對“Java高級架構師視頻教程,ExecutorService的使用”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 一级亚洲 | 亚洲成a人片77777kkk | 中文字幕在线日本 | 欧美成人午夜精品一区二区 | 国内精品久久久久久久亚洲 | 国产 日韩 一区 | 久久99这里只有精品国产 | 日本一级毛片高清免费观看视频 | 日本一级黄色毛片 | 国产精品久久精品牛牛影视 | 狠狠叉| 四虎在线永久免费视频网站 | 91九色蝌蚪在线 | 五月婷婷综合激情 | 国产精品亚洲欧美日韩一区在线 | 播放一级录像片 | 91精品福利视频 | 纯欧美一级毛片_免费 | 日本高清视频一区二区三区 | 日韩不卡毛片 | 九九精品视频在线播放 | 香蕉毛片 | 99视频福利| 免费视频一区 | 国产精品久久久久久影院 | 四虎在线观看免费视频 | 国产福利午夜 | 国产色产综合色产在线观看视频 | 最新99国产成人精品视频免费 | 国产a一级毛片午夜剧场14 | 开心激情五月婷婷 | 亚洲精品欧洲一区二区三区 | 国产美女白丝袜精品_a不卡 | 亚洲国产成人在线视频 | 国产精自产拍久久久久久蜜 | 欧美你懂得 | 奇米777影视| 最近中文字幕免费版在线3 最近中文字幕无吗高清视频 | 啪啪一级视频 | 五月婷婷综合网 | 欧美亚洲一区二区三区四 |