最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java自定義任務(wù)類定時執(zhí)行任務(wù)示例 callable和future接口使用方法

 更新時間:2014年01月16日 09:46:27   作者:  
Callable是類似于Runnable的接口,實現(xiàn)Callable接口的類和實現(xiàn)Runnable的類都是可被其它線程執(zhí)行的任務(wù)

Callable 和 Future接口

Callable是類似于Runnable的接口,實現(xiàn)Callable接口的類和實現(xiàn)Runnable的類都是可被其它線程執(zhí)行的任務(wù)。

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

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


復制代碼 代碼如下:

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 {

 /**
  * 自定義一個任務(wù)類,實現(xiàn)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,做一個無限循環(huán)
    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類型的任務(wù)
  MyCallableClass task1 = new MyCallableClass(0);
  MyCallableClass task2 = new MyCallableClass(1);
  MyCallableClass task3 = new MyCallableClass(2);

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

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

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

相關(guān)文章

  • Eclipse配置springIDE插件的方法步驟

    Eclipse配置springIDE插件的方法步驟

    本篇文章主要介紹了Eclipse配置springIDE插件的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Mybatis-plus通過添加攔截器實現(xiàn)簡單數(shù)據(jù)權(quán)限

    Mybatis-plus通過添加攔截器實現(xiàn)簡單數(shù)據(jù)權(quán)限

    系統(tǒng)需要根據(jù)用戶所屬的公司,來做一下數(shù)據(jù)權(quán)限控制,具體一點,就是通過表中的company_id進行權(quán)限控制,項目使用的是mybatis-plus,所以通過添加攔截器的方式,修改查詢sql,實現(xiàn)數(shù)據(jù)權(quán)限,本文就通過代碼給大家詳細的講解一下,需要的朋友可以參考下
    2023-08-08
  • Java使用正則表達式驗證手機號和電話號碼的方法

    Java使用正則表達式驗證手機號和電話號碼的方法

    今天小編就為大家分享一篇關(guān)于Java使用正則表達式驗證手機號和電話號碼的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java中的反射機制詳解

    Java中的反射機制詳解

    這篇文章主要介紹了JAVA 反射機制的相關(guān)知識,文中講解的非常細致,代碼幫助大家更好的理解學習,感興趣的朋友可以了解下
    2021-09-09
  • Java手動實現(xiàn)Redis的LRU緩存機制

    Java手動實現(xiàn)Redis的LRU緩存機制

    在Java中LRU的實現(xiàn)方式是使用HashMap結(jié)合雙向鏈表,HashMap的值是雙向鏈表的節(jié)點,雙向鏈表的節(jié)點也保存一份key value。
    2021-05-05
  • RabbitMQ消息的延遲隊列詳解

    RabbitMQ消息的延遲隊列詳解

    這篇文章主要介紹了RabbitMQ消息的延遲隊列,延遲隊列也就是死信交換機,有些隊列的消息成為死信后,消息中間件可以將其從當前隊列發(fā)送到另一個隊列中,這個隊列就是死信隊列,感興趣的同學可以參考下文
    2024-02-02
  • Java中instance的用法詳解

    Java中instance的用法詳解

    這篇文章主要介紹了Java中instance的用法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • SpringBoot項目整合mybatis的方法步驟與實例

    SpringBoot項目整合mybatis的方法步驟與實例

    今天小編就為大家分享一篇關(guān)于SpringBoot項目整合mybatis的方法步驟與實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • SpringBoot使用MyBatis-Flex實現(xiàn)靈活的數(shù)據(jù)庫訪問

    SpringBoot使用MyBatis-Flex實現(xiàn)靈活的數(shù)據(jù)庫訪問

    MyBatisFlex是一款優(yōu)秀的持久層框架,本文主要介紹了SpringBoot使用MyBatis-Flex實現(xiàn)靈活的數(shù)據(jù)庫訪問,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Spring Boot 3.x 全新的熱部署配置方式詳解(IntelliJ IDEA 2023.1)

    Spring Boot 3.x 全新的熱部署配置方式詳解(IntelliJ ID

    這篇文章主要介紹了Spring Boot 3.x 全新的熱部署配置方式(IntelliJ IDEA 2023.1),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07

最新評論

新乡县| 镇坪县| 彭阳县| 疏附县| 景宁| 梨树县| 磐安县| 剑川县| 大方县| 汝阳县| 大英县| 登封市| 米林县| 宁津县| 称多县| 九江县| 甘洛县| 玉树县| 满城县| 梁山县| 广元市| 同仁县| 桂平市| 安西县| 和平区| 遵义县| 横山县| 华亭县| 铜山县| 柳河县| 贺州市| 吴桥县| 乌审旗| 高州市| 定陶县| 邳州市| 稻城县| 榆社县| 宜兰县| 冷水江市| 丰顺县|