亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java使用任務架構執行任務調度示例

2019-11-26 15:46:16
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

package com.yao;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 新的任務執行架構。
 * 在Java 5.0之前啟動一個任務是通過調用Thread類的start()方法來實現的,
 * 任務的提于交和執行是同時進行的,如果你想對任務的執行進行調度,
 * 或是控制同時執行的線程數量就需要額外編寫代碼來完成。
 * 5.0里提供了一個新的任務執行架構使你可以輕松地調度和控制任務的執行,
 * 并且可以建立一個類似數據庫連接池的線程池來執行任務。
 * 這個架構主要有三個接口和其相應的具體類組成。
 * 這三個接口是Executor, ExecutorService和ScheduledExecutorService。
 * (1)Executor接口:是用來執行Runnable任務的,它只定義一個方法:
 * execute(Runnable command):執行Ruannable類型的任務
 * (2)ExecutorService:繼承了Executor的方法,并提供了執行Callable任務和中止任務執行的服務,
 * 其定義的方法主要有:
 * submit(task):可用來提交Callable或Runnable任務,并返回代表此任務的Future對象
 * invokeAll(collection of tasks):批處理任務集合,并返回一個代表這些任務的Future對象集合
 * shutdown():在完成已提交的任務后關閉服務,不再接受新任務
 * shutdownNow():停止所有正在執行的任務并關閉服務。
 * isTerminated():測試是否所有任務都執行完畢了。
 * isShutdown():測試是否該ExecutorService已被關閉
 * (3)ScheduledExecutorService:繼承ExecutorService,提供了按時間安排執行任務的功能、
 * schedule(task, initDelay): 安排所提交的Callable或Runnable任務在initDelay指定的時間后執行。
 * scheduleAtFixedRate():安排所提交的Runnable任務按指定的間隔重復執行
 * scheduleWithFixedDelay():安排所提交的Runnable任務在每次執行完后,等待delay所指定的時間后重復執行。
 *
 * 通過Executors類來獲得各種服務對象。
 * callable(Runnable task): 將Runnable的任務轉化成Callable的任務
 * newSingleThreadExecutor: 產生一個ExecutorService對象,這個對象只有一個線程可用來執行任務,若任務多于一個,任務將按先后順序執行。
 * newCachedThreadPool(): 產生一個ExecutorService對象,這個對象帶有一個線程池,線程池的大小會根據需要調整,線程執行完任務后返回線程池,供執行下一次任務使用。
 * newFixedThreadPool(int poolSize):產生一個ExecutorService對象,這個對象帶有一個大小為poolSize的線程池,若任務數量大于poolSize,任務會被放在一個queue里順序執行。
 * newSingleThreadScheduledExecutor:產生一個ScheduledExecutorService對象,這個對象的線程池大小為1,若任務多于一個,任務將按先后順序執行。
 * newScheduledThreadPool(int poolSize): 產生一個ScheduledExecutorService對象,這個對象的線程池大小為poolSize,若任務數量大于poolSize,任務會在一個queue里等待執行
 */
public class ExecuteArch {

 /**
  * 該線程輸出一行字符串
  */
 public static class MyThread implements Runnable {
  public void run() {
   System.out.println("Task repeating. " + System.currentTimeMillis());
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    System.out.println("Task interrupted. "
      + System.currentTimeMillis());
   }
  }
 }

 /**
  * 該Callable結束另一個任務
  */
 public static class MyCallable implements Callable {
  private Future future;

  public MyCallable(Future future) {
   this.future = future;
  }

  public String call() {
   System.out.println("To cancell Task..."
     + +System.currentTimeMillis());
   this.future.cancel(true);
   return "Task cancelled!";
  }
 }

 /**
  * @param args
  * @throws ExecutionException
  * @throws InterruptedException
  */
 public static void main(String[] args) throws InterruptedException,
   ExecutionException {
  // 產生一個ExecutorService對象,這個對象帶有一個線程池,線程池的大小會根據需要調整,
  // 線程執行完任務后返回線程池,供執行下一次任務使用。
  ExecutorService cachedService = Executors.newCachedThreadPool();
  Future myThreadFuture = cachedService.submit(new MyThread());
  Future myCallableFuture = cachedService.submit(new MyCallable(
    myThreadFuture));
  System.out.println(myCallableFuture.get());
  System.out.println("-----------------");

  // 將Runnable任務轉換成Callable任務
  Callable myThreadCallable = Executors.callable(new MyThread());
  Future myThreadCallableFuture = cachedService.submit(myThreadCallable);
  // 對于Runnable任務,轉換成Callable任務后,也沒有返回值
  System.out.println(myThreadCallableFuture.get());
  cachedService.shutdownNow();
  System.out.println("-----------------");

  // 產生一個ExecutorService對象,這個對象帶有一個大小為poolSize的線程池,
  // 若任務數量大于poolSize,任務會被放在一個queue里順序執行
  ExecutorService fixedService = Executors.newFixedThreadPool(2);
  fixedService.submit(new MyThread());
  fixedService.submit(new MyThread());
  // 由于線程池大小為2,所以后面的任務必須等待前面的任務執行完后才能被執行。
  myThreadFuture = fixedService.submit(new MyThread());
  myCallableFuture = fixedService.submit(new MyCallable(myThreadFuture));
  System.out.println(myCallableFuture.get());
  fixedService.shutdownNow();
  System.out.println("-----------------");

  // 產生一個ScheduledExecutorService對象,這個對象的線程池大小為poolSize,
  // 若任務數量大于poolSize,任務會在一個queue里等待執行
  ScheduledExecutorService fixedScheduledService = Executors
    .newScheduledThreadPool(2);
  // 新建任務1
  MyThread task1 = new MyThread();
  // 使用任務執行服務立即執行任務1,而且此后每隔2秒執行一次任務1。
  myThreadFuture = fixedScheduledService.scheduleAtFixedRate(task1, 0, 2,
    TimeUnit.SECONDS);
  // 新建任務2
  MyCallable task2 = new MyCallable(myThreadFuture);
  // 使用任務執行服務等待5秒后執行任務2,執行它后會將任務1關閉。
  myCallableFuture = fixedScheduledService.schedule(task2, 5,
    TimeUnit.SECONDS);
  System.out.println(myCallableFuture.get());
  fixedScheduledService.shutdownNow();
 }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本高清久久天堂| 久久久国产精品一区| 久久久久久亚洲精品中文字幕| 国产精品678| 亚洲国产美女久久久久| 亚洲亚裔videos黑人hd| 欧美日本高清一区| 亚洲视频在线观看视频| 热久久免费国产视频| 成人在线激情视频| 91高潮精品免费porn| 欧美一级黑人aaaaaaa做受| 欧美日韩不卡合集视频| 欧美性xxxxhd| 久久久久久国产免费| 日韩精品极品毛片系列视频| 日韩欧美亚洲成人| 亚洲乱码国产乱码精品精天堂| 亚洲www视频| 成人高h视频在线| 亚洲精品网址在线观看| 欧美片一区二区三区| 国产精品旅馆在线| 日韩一级裸体免费视频| 亚洲欧洲黄色网| 久久久亚洲精品视频| 久久99热精品这里久久精品| 国产精品美腿一区在线看| 亚洲男人av电影| 国产视频自拍一区| 2019精品视频| 精品视频—区二区三区免费| 欧美人与性动交a欧美精品| 久久亚洲精品一区| 国产一区二区三区在线观看视频| 亚洲第一区在线观看| 亚洲国产成人久久综合一区| 久久久久国产一区二区三区| 国产欧美精品一区二区三区-老狼| 日韩在线观看网址| 国产在线精品播放| 91黑丝在线观看| 日韩精品极品在线观看| 国产精品女主播视频| 欧美激情a∨在线视频播放| 欧美小视频在线| 国产激情久久久| 性色av一区二区三区免费| 日本韩国在线不卡| 日韩精品在线视频| 精品中文视频在线| 黄色精品一区二区| 亚洲大胆人体在线| 欧美性xxxxhd| 992tv成人免费影院| 日韩成人av网| 欧美专区国产专区| 国产黑人绿帽在线第一区| 亚洲第一福利网站| 亚洲自拍偷拍色图| 亚洲综合精品一区二区| 久久久久久91| 亚洲尤物视频网| 国内外成人免费激情在线视频网站| 亚洲另类激情图| 国产精品国产亚洲伊人久久| 亚洲视频在线看| 国产精品香蕉av| 成人黄色av免费在线观看| 国产精品久久久久免费a∨大胸| 国产一区深夜福利| 亚洲成年网站在线观看| 日韩中文字幕第一页| 日韩网站免费观看高清| 欧美最顶级的aⅴ艳星| 中文字幕国产精品| 欧美日韩在线视频一区二区| 亚洲自拍偷拍第一页| 欧美黄色www| 欧美午夜视频一区二区| 欧美精品制服第一页| 久久久久免费视频| 人人澡人人澡人人看欧美| 亚洲免费视频一区二区| 午夜精品www| 亚洲精品98久久久久久中文字幕| 欧美性xxxxx极品| 国产精品自拍偷拍视频| 亚洲91精品在线观看| 亚洲第一区中文99精品| 97视频在线观看免费| 97在线视频免费播放| 91av在线精品| 成人美女免费网站视频| www.欧美精品一二三区| 大桥未久av一区二区三区| 欧美日韩国产91| 成人妇女免费播放久久久| 久久精品小视频| 精品伊人久久97| 国产日韩欧美电影在线观看| 欧美一级片一区| 久久理论片午夜琪琪电影网| 亚洲一区二区三区成人在线视频精品| 国产在线高清精品| 欧美亚洲另类在线| 久久精品国产亚洲7777| 日韩av在线天堂网| 95av在线视频| 欧美在线不卡区| 国产精品一区二区三区久久久| 色综合色综合久久综合频道88| 亚洲人成在线观看网站高清| 91精品美女在线| 午夜免费久久久久| 91免费版网站入口| 91av在线精品| 成人黄色av网站| 亚洲精品美女久久久久| 69国产精品成人在线播放| 黑人巨大精品欧美一区二区三区| 黑人精品xxx一区一二区| 亚洲国产成人一区| 亚洲精品一区在线观看香蕉| 亚洲欧美变态国产另类| 欧美插天视频在线播放| 国产精品一香蕉国产线看观看| 亚洲黄页视频免费观看| 成人免费在线视频网址| 国产精品久久久久久久app| 亚洲成人久久一区| 久久亚洲国产精品| 精品国产一区二区三区久久狼5月| 国产欧美日韩中文字幕在线| 隔壁老王国产在线精品| 亚洲xxxx在线| 久久九九热免费视频| 久久99青青精品免费观看| 国产成人精品免高潮费视频| 久久精品视频中文字幕| 亚洲va码欧洲m码| 成人久久精品视频| 性欧美视频videos6一9| 欧美理论片在线观看| 精品一区二区亚洲| www日韩欧美| 91精品国产91久久久久久久久| 在线看欧美日韩| 国产精品人成电影在线观看| 成人免费网站在线看| 国产午夜精品全部视频在线播放| 久久夜色精品国产| 日本精品视频网站| 69影院欧美专区视频| 日本精品久久中文字幕佐佐木| 欧美成人全部免费| 欧美成人一区在线| 日韩精品中文字幕在线| 狠狠躁18三区二区一区| 亚洲最大av网站| 最近2019中文字幕在线高清| 久久久久久久一区二区| 日本一区二三区好的精华液| 日韩毛片在线看|