zoukankan      html  css  js  c++  java
  • Java:Callable

    1. Runnable是执行工作的独立任务,但它不返回任何值。

    2. 如果你希望任务在完成时能够返回一个值,那么可以实现Callable接口而不是Runnable接口。

    3. Callable是一个具有类型参数的泛型,它的类型参数返回的是从方法call()中返回的值。除此之外,还必须使用ExecutorService.submit()方法来调用它。

    4. submit()方法会产生Future对象,它用Callable返回结果的特定类型进行了参数化。可以通过isDone()来查询Future是否已经完成。任务完成时,它有一个结果,你可以通过

        调用get()方法获取该结果。当然,也可以不调用isDone()方法,直接调用get(),这种情况下,get()将阻塞,直至结果准备就绪。

     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 TaskWithResult implements Callable<String> {
    10 
    11     private int id;
    12     
    13     public TaskWithResult(int id) {
    14         this.id = id;
    15     }
    16     
    17     @Override
    18     public String call() throws Exception {
    19         return "Result of TaskWithResult: " + this.id;
    20     }
    21     
    22     public static void main(String[] args) {
    23         ExecutorService exec = Executors.newCachedThreadPool();
    24         ArrayList<Future<String>> results = new ArrayList<Future<String>>();
    25         for (int i = 0; i < 5; i++) {
    26             results.add(exec.submit(new TaskWithResult(i)));
    27         }
    28         
    29         for (Future<String> fs : results) {
    30             try {
    31                 // get blocks until completion.
    32                 System.out.println(fs.get());
    33             } catch (InterruptedException | ExecutionException e) {
    34                 e.printStackTrace();
    35             } finally {
    36                 exec.shutdown();
    37             }
    38         }
    39     }
    40 }
    41 
    42 /**
    43  * 程序运行结果:
    44  * Result of TaskWithResult: 0
    45  * Result of TaskWithResult: 1
    46  * Result of TaskWithResult: 2
    47  * Result of TaskWithResult: 3
    48  * Result of TaskWithResult: 4
    49  */
    TaskWithResult.java

  • 相关阅读:
    【贪心】POJ1017:Packets
    【贪心】POJ2393:Yogurt factory
    【贪心】POJ3190:Stall Reservations
    【递归】地盘划分
    【递归与递推】青蛙过河
    【搜索】POJ1242:Rescue
    单词方阵(dfs)
    反向因子Inverse Factorial
    P1604 B进制星球
    抵制克苏恩(记忆化搜索)
  • 原文地址:https://www.cnblogs.com/slowalker/p/3377906.html
Copyright © 2011-2022 走看看