如何用 Java 中的 lambda 表达式编写 Callable?


一个Callable 接口在 java.util.concurrent 包中定义。一个Callable 对象返回的是一个线程计算的结果,这与一个Runnable 接口相反,后者只能运行该线程。Callable对象返回Future 对象,该对象为一个线程执行的任务提供监视进度的方法。Future 对象用于检查Callable 接口状态并在线程完成任务后从Callable 中获取结果。

在下面的例子中,我们可以将Callable 接口写成一个lambda 表达式。

示例

import java.util.concurrent.*;

public class LambdaCallableTest {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executor = Executors.newSingleThreadExecutor();
      Callable c = () -> {   // Lambda Expression
         int n = 0;
         for(int i = 0; i < 100; i++) {
            n += i;
         }
         return n;
      };
      Future<Integer> future = executor.submit(c);
      try {
         Integer result = future.get(); //wait for a thread to complete
         System.out.println(result);
      } catch(ExecutionException e) {
         e.printStackTrace();
      }
      executor.shutdown();
   }
}

输出

4950

更新日期:2020-07-13

6K+ 浏览

开启你的 职业

通过完成课程获得认证

开始
广告