在路上

          路上有驚慌,路上有理想

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            28 Posts :: 1 Stories :: 10 Comments :: 0 Trackbacks

          1.類介紹:
          Executor
          接口提供一種將任務(wù)提交與每個任務(wù)將如何運(yùn)行的機(jī)制(包括線程使用的細(xì)節(jié)、調(diào)度等)分離開來的方法。
          它只有一個方法excute(Runnable command),你可以復(fù)寫此方法,讓Runnable同步或異步執(zhí)行
          ExecutorServiceExecutor的一個子接口,提供了管理線程的方法,可為跟蹤一個或多個異步任務(wù)執(zhí)行狀況而生成 Future 的方法。
          ThreadPoolExecutor是ExecutorService的一個實(shí)現(xiàn)類,它通常與Executors工廠一起使用。
          下面的方法取自Executors類
          public static ExecutorService newFixedThreadPool(int nThreads) {
          return new ThreadPoolExecutor(nThreads, nThreads,
          0L, TimeUnit.MILLISECONDS,
          new LinkedBlockingQueue<Runnable>());
          }
          這里面使用ThreadPoolExecutor創(chuàng)建一個線程數(shù)為nThreads的線程池。
          類似的工廠方法還有很多,可以查看JDK
          ExecutorService的常用方法:
          invokeAll 執(zhí)行所有任務(wù),全部執(zhí)行完畢后返回每個任務(wù)的結(jié)果(FutureList),包括每個任務(wù)的狀態(tài)
          invokeAny 與上面方法的區(qū)別是,只返回一個任務(wù)成功執(zhí)行結(jié)果Future
          submit 提交一個Task去執(zhí)行,并返回執(zhí)行結(jié)果
          awaitTermination 當(dāng)執(zhí)行線程中斷、超時,或調(diào)用了shutdown方法后,阻塞直到所有的Task都執(zhí)行結(jié)束。
          shutdown 關(guān)閉所有執(zhí)行過的Task,并不再接收新線程
          isTerminated 如果所有Task都關(guān)閉則返回True,前提是調(diào)用過shutdown或shutdownNow
          2.使用示例:
          a.首先定義一個輔助類SystemConstant,大致方法如下:
          //初始化一個線程池
          public static ExecutorService getExecutor() {
          if(PROCESS_EXECUTOR == null || PROCESS_EXECUTOR.isTerminated()) {
          PROCESS_EXECUTOR = Executors.newFixedThreadPool(EXECUTOR_SIZE);
          }
          return PV_PROCESS_EXECUTOR;
          }
          //定義關(guān)閉方法
          public static void awaitTerminationExecutor(long timeout, TimeUnit unit) {
          getExecutor().shutdown();
          try {
          getExecutor().awaitTermination(timeout, unit);
          } catch (InterruptedException e) {
          e.printStackTrace();
          }
          }
          b.接下來是調(diào)用:
          try {
          SystemConstant.getExecutor().invokeAll(SystemUtils.toCallable(
          new SystemUtils.CallableHandle<IPvProcess>() {

          public void handle(Process process) throws Exception {
          process.processLogs(logs, statDate);
          }

          }, prepareProcesses), perOutOfTime, TimeUnit.HOURS);
          } catch (Exception e) {
          logger.error(e);
          }
          SystemConstant.awaitTerminationProgramExecutor(allOutOfTime, TimeUnit.HOURS);

          3. 類結(jié)構(gòu)圖

          java.util.concurrent
          Class ThreadPoolExecutor

          java.lang.Object
          extended by java.util.concurrent.AbstractExecutorService
          extended by java.util.concurrent.ThreadPoolExecutor
          All Implemented Interfaces:
          Executor, ExecutorService
          Direct Known Subclasses:
          ScheduledThreadPoolExecutor
          posted on 2010-08-31 21:37 阮步兵 閱讀(4884) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 名山县| 化德县| 巴中市| 镇坪县| 正镶白旗| 麻城市| 东丰县| 原阳县| 隆安县| 攀枝花市| 永兴县| 金华市| 营口市| 称多县| 镇坪县| 南宁市| 华安县| 三原县| 团风县| 临潭县| 得荣县| 公主岭市| 永仁县| 哈尔滨市| 象山县| 电白县| 香港 | 富蕴县| 怀仁县| 濮阳县| 双桥区| 都江堰市| 体育| 固阳县| 饶河县| 英山县| 富锦市| 静乐县| 中西区| 综艺| 新化县|