一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java自定義任務類定時執行任務示例 callable和future接口使用方法

java自定義任務類定時執行任務示例 callable和future接口使用方法

2019-10-31 15:00java教程網 JAVA教程

Callable是類似于Runnable的接口,實現Callable接口的類和實現Runnable的類都是可被其它線程執行的任務

Callable是類似于Runnable的接口,實現Callable接口的類和實現Runnable的類都是可被其它線程執行的任務。

Callable和Runnable有幾點不同: 
(1)Callable規定的方法是call(),而Runnable規定的方法是run().
(2)Callable的任務執行后可返回值,而Runnable的任務是不能返回值的。 
(3)call()方法可拋出異常,而run()方法是不能拋出異常的。
(4)運行Callable任務可拿到一個Future對象, Future表示異步計算的結果。

它提供了檢查計算是否完成的方法,以等待計算的完成,并檢索計算的結果。
通過Future對象可了解任務執行情況,可取消任務的執行,還可獲取任務執行的結果。

 

復制代碼代碼如下:


package com.yao;

 

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CallableAndFuture {

 /**
  * 自定義一個任務類,實現Callable接口
  */
 public static class MyCallableClass implements Callable {
  // 標志位
  private int flag = 0;

  public MyCallableClass(int flag) {
   this.flag = flag;
  }

  public String call() throws Exception {
   if (this.flag == 0) {
    // 如果flag的值為0,則立即返回
    return "flag = 0";
   }
   if (this.flag == 1) {
    // 如果flag的值為1,做一個無限循環
    try {
     while (true) {
      System.out.println("looping......");
      Thread.sleep(2000);
     }
    } catch (InterruptedException e) {
     System.out.println("Interrupted");
    }
    return "false";
   } else {
    // falg不為0或者1,則拋出異常
    throw new Exception("Bad flag value!");
   }
  }
 }

 public static void main(String[] args) {
  // 定義3個Callable類型的任務
  MyCallableClass task1 = new MyCallableClass(0);
  MyCallableClass task2 = new MyCallableClass(1);
  MyCallableClass task3 = new MyCallableClass(2);

  // 創建一個執行任務的服務
  ExecutorService es = Executors.newFixedThreadPool(3);
  try {
   // 提交并執行任務,任務啟動時返回了一個Future對象,
   // 如果想得到任務執行的結果或者是異常可對這個Future對象進行操作
   Future future1 = es.submit(task1);
   // 獲得第一個任務的結果,如果調用get方法,當前線程會等待任務執行完畢后才往下執行
   System.out.println("task1: " + future1.get());

   Future future2 = es.submit(task2);
   // 等待5秒后,再停止第二個任務。因為第二個任務進行的是無限循環
   Thread.sleep(5000);
   System.out.println("task2 cancel: " + future2.cancel(true));

   // 獲取第三個任務的輸出,因為執行第三個任務會引起異常
   // 所以下面的語句將引起異常的拋出
   Future future3 = es.submit(task3);
   System.out.println("task3: " + future3.get());
  } catch (Exception e) {
   System.out.println(e.toString());
  }
  // 停止任務執行服務
  es.shutdownNow();
 }
}

 

 

延伸 · 閱讀

精彩推薦
  • JAVA教程Java如何利用Mybatis進行數據權限控制詳解

    Java如何利用Mybatis進行數據權限控制詳解

    這篇文章主要介紹了Java如何利用Mybatis進行數據權限控制詳解,數據權限控制最終的效果是會要求在同一個數據請求方法中,根據不同的權限返回不同的數據...

    陳晨_軟件五千言3852019-06-27
  • JAVA教程解析Tomcat 6、7在EL表達式解析時存在的一個Bug

    解析Tomcat 6、7在EL表達式解析時存在的一個Bug

    這篇文章主要是對Tomcat 6、7在EL表達式解析時存在的一個Bug進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助 ...

    java技術網4332019-10-23
  • JAVA教程教你如何編寫簡單的網絡爬蟲

    教你如何編寫簡單的網絡爬蟲

    實際的爬蟲是從一系列的種子鏈接開始。種子鏈接是起始節點,種子頁面的超鏈接指向的頁面是子節點(中間節點),對于非html文檔,如excel等,不能從中...

    java之家4582019-10-16
  • JAVA教程如何利用NetworkInterface獲取服務器MAC地址

    如何利用NetworkInterface獲取服務器MAC地址

    今天介紹一種通用的跨平臺的操作方式,那就是JDK自帶的NetworkInterface接口,該接口在JDK1.4已經出現,但是功能比較少,JDK1.6之后新增了不少新功能,比較不...

    java教程網1312019-10-11
  • JAVA教程java使用Jsoup連接網站超時的解決方法

    java使用Jsoup連接網站超時的解決方法

    jsoup是一個非常好的解析網頁的包,用java開發的,提供了類似DOM,CSS選擇器的方式來查找和提取文檔中的內容,提取文檔內容時會出現超時的情況,解決方法...

    java教程網3072019-10-21
  • JAVA教程Java代碼實現矩形覆蓋實例

    Java代碼實現矩形覆蓋實例

    這篇文章主要介紹了Java代碼實現矩形覆蓋實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考...

    Maxinxx4622019-06-27
  • JAVA教程了解Java多線程的可見性與有序性

    了解Java多線程的可見性與有序性

    這篇文章主要介紹了了解Java多線程的可見性與有序性,在Java內存模型中,允許編譯器和處理器對指令進行重排序,但是重排序過程不會影響到單線程程序...

    mseddl3882019-06-28
  • JAVA教程Java 添加Word目錄的2種方法示例代碼詳解

    Java 添加Word目錄的2種方法示例代碼詳解

    目錄是一種能夠快速、有效地幫助讀者了解文檔或書籍主要內容的方式。這篇文章主要介紹了Java 添加Word目錄的2種方法 ,需要的朋友可以參考下...

    E-iceblue2792019-07-04
主站蜘蛛池模板: tk白丝丨vk| 亚洲欧美韩国日产综合在线 | 欧洲女同同性videos0 | 欧美日韩国产精品自在自线 | 女人扒开下面让男人桶爽视频 | 大奶妈咪女教师 | 亚洲国产成人综合 | 高清一级做a爱免费视 | 97影院手机版 | 美女把腿开让我 | 国产在线xvideos| 国产精品成人扳一级aa毛片 | 十大免费b2b网站 | 欧美日韩成人在线 | 陈峰姚瑶全集小说无删节 | 日韩av.com | 粗了大了 整进去好爽视频 刺激一区仑乱 | gogort99人体专业网站 | japanese人妖xvideos | 亚洲不卡视频在线观看 | 精品成人在线 | 9 1 视频在线 | 免费观看无人区完整版 | 欧美日韩一区二区三区在线视频 | 青青草成人影院 | 天天白天天谢天天啦 | 国产东北3p真实在线456视频 | 国产亚洲女在线线精品 | tolove第一季动画在线看 | 天天干天天操天天爽 | 99久久精品国产综合一区 | 女八把屁股扒开让男生添 | 香蕉视频在线观看网址 | 四虎导航| 免费国产好深啊好涨好硬视频 | 久久久久久久伊人电影 | 腿交hd | 亚洲七七久久综合桃花 | 911香蕉视频 | 国产免费精彩视频 | 免费日批 |