实现了两个Java类,RetDouble它们RetInt都实现了Callable,第一个使用作为参数 a Double,第二个使用作为参数 an Integer。它们都覆盖了call()Callable 的方法,第一个返回一个Double值,而第二个返回一个Integer.
我们使用Executors 的API方法创建一个ExecutorService。该方法返回一个线程池,该线程池重用在共享无界队列上运行的固定数量的线程。newFixedThreadPool(int nThreads)
ExecutorService对两个 Callables 使用其 API 方法,以便提交一个返回值的任务以供执行,并返回两个代表任务未决结果的 Future对象。submit(Callable task)
为了获取 Future 对象的值,我们可以使用它们的get()API 方法,在必要时等待计算完成,然后检索结果。
最后 ExecutorService 使用其shutdown()API 方法启动有序关闭,其中执行之前提交的任务,但不会接受新任务。
让我们看一下下面的代码片段:
包 com.javacodegeeks.snippets.core;
导入 java.util.concurrent.Callable;
导入 java.util.concurrent.ExecutorService;
导入 java.util.concurrent.Executors;
导入 java.util.concurrent.Future;
公共类 RetVal {
公共静态 void main(String args[]) 抛出异常 {
ExecutorService 服务 = Executors.newFixedThreadPool(3);
Futureretdouble = service.submit(new RetDouble());
FutureretInt = service.submit(new RetInt());
System.out.println(retdouble.get());
System.out.println(retInt.get());
service.shutdown();
}
}
类 RetDouble 实现 Callable{
RetDouble() {
}
@覆盖
公共双调用(){
返回 2.0;
}
}
类 RetInt 实现 Callable{
RetInt() {
}
@覆盖
公共整数调用(){
返回 1;
}
}
输出:
2.0
1
这是一个如何在 Java 中返回 Thread 值的示例。