国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

【Thinking in Java】Java Callable的使用

2019-11-15 00:05:46
字體:
供稿:網(wǎng)友
【Thinking in java】Java Callable的使用

  Callable<>和Runable類似,都是用于Java的并發(fā)執(zhí)行。

  唯一的區(qū)別是,Runable的run方法的返回是void,而Callable的call方法是有返回值的。

  call方法返回的類型是實現(xiàn)Callable<?>泛型接口時所指定的類型,不然會編譯出錯。

  那么,怎樣獲取call方法的返回值呢?——通過執(zhí)行Callable,可以返回的Future對象,通過調(diào)用future對象的get方法來獲取call方法的返回值。

  綜上,你把Callable當成是有返回值的Runable就行了,只不過Callable的是call,Runable的是run。

  下面是演示代碼:

 1 import java.util.ArrayList; 2 import java.util.concurrent.Callable; 3 import java.util.concurrent.ExecutionException; 4 import java.util.concurrent.ExecutorService; 5 import java.util.concurrent.Executors; 6 import java.util.concurrent.Future; 7  8  9 public class CallableTest{10     public static void main(String[] args) {11         ExecutorService executorService=    //創(chuàng)建線程池12                 Executors.newCachedThreadPool();13         ArrayList<Future<String>> list=14                 new ArrayList<Future<String>>();15         for (int i = 0; i < 10; i++) {16             list.add(executorService    //通過submit方法來提交Callable到線程池中執(zhí)行17                     .submit(new TaskWithResult()));18         }19         for (Future<String> future : list) {20             try {21                 System.out.PRintln(future.get()); //通過get方法來獲取call返回值22             } catch (InterruptedException e) {23                 e.printStackTrace();24             } catch (ExecutionException e) {25                 e.printStackTrace();26             }27         }28     }29 30     31     static class TaskWithResult implements Callable<String>{32         private static int taskNum=0;33         private int taskId=taskNum;34         public TaskWithResult() {35             taskNum++;36         }37 38         @Override39         public String call() throws Exception {40             try {41                 Thread.sleep(this.taskId*1000);    //我制造的時間差,更直觀地顯示call和run方法的相似性。42             } catch (InterruptedException e) {43                 e.printStackTrace();44             }45             return "Result of TaskWithResult: "+this.taskId;46         }47         48     } 49 50 }

  運行結(jié)果:

  Result of TaskWithResult: 0  Result of TaskWithResult: 1  Result of TaskWithResult: 2  Result of TaskWithResult: 3  Result of TaskWithResult: 4  Result of TaskWithResult: 5  Result of TaskWithResult: 6  Result of TaskWithResult: 7  Result of TaskWithResult: 8  Result of TaskWithResult: 9

  以上的運行結(jié)果是每隔一秒打印一行的,這說明,call和run是差不多的。

  


上一篇:java筆試練習題

下一篇:線程

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南木林县| 南陵县| 乌兰浩特市| 区。| 定西市| 大厂| 东港市| 鄂尔多斯市| 城口县| 稻城县| 连平县| 建湖县| 专栏| 元阳县| 安塞县| 南漳县| 阿拉善盟| 汽车| 沈丘县| 临城县| 平顶山市| 屏山县| 承德县| 招远市| 高州市| 岗巴县| 凤山市| 晋州市| 保德县| 斗六市| 满城县| 桃园县| 寿阳县| 永和县| 黄平县| 富锦市| 察雅县| 托克托县| 罗山县| 锦屏县| 东城区|