欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java  Callable與Future的詳解及實例

 更新時間:2017年01月18日 11:05:08   投稿:lqh  
這篇文章主要介紹了java Callable與Future的詳解及實例的相關資料,需要的朋友可以參考下

java  Callable與Future

Callable與 Future 兩功能是Java在后續(xù)版本中為了適應多并法才加入的,Callable是類似于Runnable的接口,實現(xiàn)Callable接口的類和實現(xiàn)Runnable的類都是可被其他線程執(zhí)行的任務。

Callable的接口定義如下;


public interface Callable<V> { 

   V  call()  throws Exception; 
<span id="transmark"></span>
} 

Callable和Runnable的區(qū)別如下:

I    Callable定義的方法是call,而Runnable定義的方法是run。

II   Callable的call方法可以有返回值,而Runnable的run方法不能有返回值。

III  Callable的call方法可拋出異常,而Runnable的run方法不能拋出異常。 

Future 介紹

Future表示異步計算的結果,它提供了檢查計算是否完成的方法,以等待計算的完成,并檢索計算的結果。Future的cancel方法可以取消任務的執(zhí)行,它有一布爾參數(shù),參數(shù)為 true 表示立即中斷任務的執(zhí)行,參數(shù)為 false 表示允許正在運行的任務運行完成。Future的 get 方法等待計算完成,獲取計算結果

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

/**

 * Callable 和 Future接口

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

 * Callable和Runnable有幾點不同:

 * (1)Callable規(guī)定的方法是call(),而Runnable規(guī)定的方法是run().

 * (2)Callable的任務執(zhí)行后可返回值,而Runnable的任務是不能返回值的。

 * (3)call()方法可拋出異常,而run()方法是不能拋出異常的。

 * (4)運行Callable任務可拿到一個Future對象,

 * Future 表示異步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,并檢索計算的結果。

 * 通過Future對象可了解任務執(zhí)行情況,可取消任務的執(zhí)行,還可獲取任務執(zhí)行的結果。

 */

public class CallableAndFuture {

  public static class MyCallable implements Callable{

     private int flag = 0; 

     public MyCallable(int flag){

         this.flag = flag;

     }

     public String call() throws Exception{

       if (this.flag == 0){ 

           return "flag = 0";

      } 

      if (this.flag == 1){  

        try {

          while (true) {

              System.out.println("looping.");

              Thread.sleep(2000);

          }

        } catch (InterruptedException e) {

               System.out.println("Interrupted");

        }

        return "false";

      } else {  

            throw new Exception("Bad flag value!");

      }

    }

  }

  public static void main(String[] args) {

    // 定義3個Callable類型的任務

    MyCallable task1 = new MyCallable(0);

    MyCallable task2 = new MyCallable(1);

    MyCallable task3 = new MyCallable(2);

    

    // 創(chuàng)建一個執(zhí)行任務的服務

    ExecutorService es = Executors.newFixedThreadPool(3);

    try {

      // 提交并執(zhí)行任務,任務啟動時返回了一個Future對象,

      // 如果想得到任務執(zhí)行的結果或者是異??蓪@個Future對象進行操作

      Future future1 = es.submit(task1);

      // 獲得第一個任務的結果,如果調用get方法,當前線程會等待任務執(zhí)行完畢后才往下執(zhí)行

      System.out.println("task1: " + future1.get());

      

      Future future2 = es.submit(task2);

      // 等待5秒后,再停止第二個任務。因為第二個任務進行的是無限循環(huán)

      Thread.sleep(5000);

      System.out.println("task2 cancel: " + future2.cancel(true));

      

      // 獲取第三個任務的輸出,因為執(zhí)行第三個任務會引起異常

      // 所以下面的語句將引起異常的拋出

      Future future3 = es.submit(task3);

      System.out.println("task3: " + future3.get());

    } catch (Exception e){

      System.out.println(e.toString());

    }

    // 停止任務執(zhí)行服務

    es.shutdownNow();

  }

}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Spring中的Aware接口詳細解析

    Spring中的Aware接口詳細解析

    這篇文章主要介紹了Spring中的Aware接口詳細解析,Aware是一個具有標識作用的超級接口,具體實現(xiàn)是有子接口去決定的,但是子接口至少要有一個帶一個參數(shù)的且返回是空的方法,需要的朋友可以參考下
    2023-12-12
  • Java讀取DBF文件(GBK編碼)的方法

    Java讀取DBF文件(GBK編碼)的方法

    在Java開發(fā)中,有時需要讀取DBF(dBase文件)格式的數(shù)據(jù)文件,而這些文件通常采用GBK(簡體中文)編碼,本文將介紹如何使用Java讀取采用GBK編碼的DBF文件,需要的朋友可以參考下
    2024-11-11
  • Java設計模式之建造者模式的示例詳解

    Java設計模式之建造者模式的示例詳解

    建造者模式,是一種對象構建模式 它可以將復雜對象的建造過程抽象出來,使這個抽象過程的不同實現(xiàn)方法可以構造出不同表現(xiàn)的對象。本文將通過示例講解建造者模式,需要的可以參考一下
    2022-02-02
  • java 微信隨機紅包算法代碼實例

    java 微信隨機紅包算法代碼實例

    這篇文章主要介紹了java 微信隨機紅包算法的相關資料,并附實例代碼,需要的朋友可以參考下
    2016-10-10
  • springboot遠程執(zhí)行服務器指令

    springboot遠程執(zhí)行服務器指令

    這篇文章主要介紹了springboot遠程執(zhí)行服務器指令,本例是java遠程連接到服務器,去抓取查詢kubesphere中的etcd日志,并返回,需要的朋友可以參考下
    2023-09-09
  • idea找不到xxx依賴項的問題及解決方法

    idea找不到xxx依賴項的問題及解決方法

    今天下載這個依賴一直報錯,紅色,顯示錯誤找不到依賴項,使用了3個步驟,不太明白哪部解決的,下面小編給大家分享idea找不到xxx依賴項的問題及解決方法,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Spring + Spring Boot + MyBatis + MongoDB的整合教程

    Spring + Spring Boot + MyBatis + MongoDB的整合教程

    這篇文章主要給大家介紹了關于Spring + Spring Boot + MyBatis + MongoDB的整合教程,文中通過圖文以及示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-12-12
  • java導出excel 瀏覽器直接下載或者或以文件形式導出

    java導出excel 瀏覽器直接下載或者或以文件形式導出

    這篇文章主要介紹了java導出excel 瀏覽器直接下載或者或以文件形式導出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java字符串去除特殊字符內容的實例

    Java字符串去除特殊字符內容的實例

    下面小編就為大家分享一篇Java字符串去除特殊字符內容的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • SpringSecurity實現(xiàn)權限認證與授權的使用示例

    SpringSecurity實現(xiàn)權限認證與授權的使用示例

    本文主要介紹了SpringSecurity實現(xiàn)權限認證與授權的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11

最新評論