<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    在路上

    路上有驚慌,路上有理想

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      28 Posts :: 1 Stories :: 10 Comments :: 0 Trackbacks

    1.類介紹:
    Executor
    接口提供一種將任務提交與每個任務將如何運行的機制(包括線程使用的細節、調度等)分離開來的方法。
    它只有一個方法excute(Runnable command),你可以復寫此方法,讓Runnable同步或異步執行
    ExecutorServiceExecutor的一個子接口,提供了管理線程的方法,可為跟蹤一個或多個異步任務執行狀況而生成 Future 的方法。
    ThreadPoolExecutor是ExecutorService的一個實現類,它通常與Executors工廠一起使用。
    下面的方法取自Executors類
    public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads, nThreads,
    0L, TimeUnit.MILLISECONDS,
    new LinkedBlockingQueue<Runnable>());
    }
    這里面使用ThreadPoolExecutor創建一個線程數為nThreads的線程池。
    類似的工廠方法還有很多,可以查看JDK
    ExecutorService的常用方法:
    invokeAll 執行所有任務,全部執行完畢后返回每個任務的結果(FutureList),包括每個任務的狀態
    invokeAny 與上面方法的區別是,只返回一個任務成功執行結果Future
    submit 提交一個Task去執行,并返回執行結果
    awaitTermination 當執行線程中斷、超時,或調用了shutdown方法后,阻塞直到所有的Task都執行結束。
    shutdown 關閉所有執行過的Task,并不再接收新線程
    isTerminated 如果所有Task都關閉則返回True,前提是調用過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;
    }
    //定義關閉方法
    public static void awaitTerminationExecutor(long timeout, TimeUnit unit) {
    getExecutor().shutdown();
    try {
    getExecutor().awaitTermination(timeout, unit);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    b.接下來是調用:
    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. 類結構圖

    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 阮步兵 閱讀(4880) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲欧美日韩中文高清www777| 老司机免费午夜精品视频| 免费看大黄高清网站视频在线| 免费人成大片在线观看播放电影| 亚洲日韩精品无码一区二区三区| 日本片免费观看一区二区| 久久久久亚洲精品无码网址色欲| 亚洲日韩精品射精日| 大地资源免费更新在线播放| 亚欧国产一级在线免费| 亚洲成a人不卡在线观看| 亚洲乱码国产一区网址| 又粗又大又黑又长的免费视频| 人体大胆做受免费视频| 亚洲乱码一区av春药高潮| 亚洲婷婷国产精品电影人久久| 69xx免费观看视频| A级毛片成人网站免费看| 亚洲熟妇久久精品| 亚洲人成电影福利在线播放 | a毛片基地免费全部视频| 人体大胆做受免费视频| 亚洲国产乱码最新视频| 亚洲国产AV无码专区亚洲AV| 国产乱子伦精品免费无码专区| 亚洲免费视频在线观看| 国产99视频精品免费视频76| 亚洲综合一区二区三区四区五区| 国产成A人亚洲精V品无码性色| 又粗又硬免费毛片| 成人毛片免费观看| 免费观看激色视频网站bd| 99麻豆久久久国产精品免费| 亚洲av永久中文无码精品综合| 亚洲国产成人手机在线电影bd| 精品国产综合成人亚洲区| 国产伦精品一区二区三区免费下载 | 精选影视免费在线 | 色天使色婷婷在线影院亚洲| 亚洲福利视频网址| 亚洲丁香色婷婷综合欲色啪|