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

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

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java Callable與Future的詳解及實例

java Callable與Future的詳解及實例

2020-07-28 14:26java教程網 Java教程

這篇文章主要介紹了java Callable與Future的詳解及實例的相關資料,需要的朋友可以參考下

java  CallableFuture

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

Callable的接口定義如下;

?
1
2
3
4
5
public interface Callable<V> {
 
   V  call()  throws Exception;
<span id="transmark"></span>
}

Callable和Runnable的區別如下:

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

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

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

Future 介紹

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import java.util.concurrent.Callable;
 
import java.util.concurrent.ExecutorService;
 
import java.util.concurrent.Executors;
 
import java.util.concurrent.Future;
 
/**
 
 * Callable 和 Future接口
 
 * Callable是類似于Runnable的接口,實現Callable接口的類和實現Runnable的類都是可被其它線程執行的任務。
 
 * Callable和Runnable有幾點不同:
 
 * (1)Callable規定的方法是call(),而Runnable規定的方法是run().
 
 * (2)Callable的任務執行后可返回值,而Runnable的任務是不能返回值的。
 
 * (3)call()方法可拋出異常,而run()方法是不能拋出異常的。
 
 * (4)運行Callable任務可拿到一個Future對象,
 
 * Future 表示異步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,并檢索計算的結果。
 
 * 通過Future對象可了解任務執行情況,可取消任務的執行,還可獲取任務執行的結果。
 
 */
 
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);
 
    
 
    // 創建一個執行任務的服務
 
    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();
 
  }
 
}

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 福利视频一区青娱 | 亚洲AV无码专区国产精品麻豆 | 日日草视频 | 国产精品一区二区久久不卡 | 午夜爱爱爱爱爽爽爽视频网站 | 草草影院国产 | 亚洲AV无码专区国产乱码网站 | 亚洲成综合人影院在院播放 | 亚洲精品tv久久久久久久久久 | 亚欧日韩| 国产免费久久精品44 | 我在厨房摸岳的乳HD在线观看 | 美女禁区视频无遮挡免费看 | japanesepooping脱粪 | 国产午夜精品久久久久小说 | 欧美最猛性xxxxx男男 | 俄罗斯一级毛片免费播放 | 99热国产这里只有精品99 | 国产一精品一av一免费爽爽 | 奇米社区 | 国内精品久久久久影院男同志 | 岛国最新资源网站 | 99国产精品 | 91久久偷偷做嫩草影院免费看 | 涩情主播在线翻车 | 男男调教打屁股 | 欧美a一级片 | 韩国甜性涩爱免费观看 | 亚洲小视频网站 | 我要看靠逼片 | 1024亚洲精品国产 | 亚洲国产日韩欧美一区二区三区 | 国产亚洲精品一区二区在线观看 | 精品视频久久久久 | 欧美又大又粗又爽视频 | 亚洲色图综合网 | 天天色天天色天天色 | 日韩夫妻性生活 | 明星ai智能人脸替换造梦在线播放 | 99资源站| 四虎库|