在本教程中,我们将看到有关 Java FutureTask 的示例。 FutureTask 类已在 JDK 5 中与 Executor Framework 一起引入。FutureTask类是Future对象的具体实现,提供了启动和取消任务的方法,也提供了查看计算是否完成的方法。我们可以查询 FutureTask 对象并获取计算结果。 如果我们在 FutureTask 对象上调用 get 方法,它是阻塞调用,一旦计算完成就返回。 让我们通过这个例子来了解更多。
FutureTask
我们创建一个非常简单的示例。
步骤 1:创建一个名为MultiplyingTask.java.
MultiplyingTask.java
package org.arpit.java2blog; import java.util.concurrent.Callable; public class MultiplyingTask implements Callable{ int a; int b; long sleepTime; public MultiplyingTask(int a, int b, long sleepTime) { this.a=a; this.b=b; this.sleepTime=sleepTime; } @Override public Integer call() throws Exception { Thread.sleep(sleepTime); return a*b; } }
第 2 步:创建一个名为FutureTaskMain. 这将是我们的主要课程。
FutureTaskMain
package org.arpit.java2blog; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; public class FutureTaskMain { public static void main(String[] args) { MultiplyingTask multiplyingTask1= new MultiplyingTask(10,20,2000l); MultiplyingTask multiplyingTask2= new MultiplyingTask(20,40,4000l); FutureTask<Integer> futureTask1=new FutureTask<>(multiplyingTask1); FutureTask<Integer> futureTask2=new FutureTask<>(multiplyingTask2); ExecutorService executor = Executors.newFixedThreadPool(2); executor.execute(futureTask1); executor.execute(futureTask2); while(true) { try { if(!futureTask1.isDone()) { System.out.println("FutureTask1 output="+futureTask1.get()); } if(!futureTask2.isDone()) { System.out.println("Waitng for futureTask2 for completion"); System.out.println("FutureTask2 output="+futureTask2.get()); } if(futureTask1.isDone() && futureTask2.isDone()) { System.out.println("Completed both the FutureTasks, shutting down the executors"); executor.shutdown(); return; } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } }
让我们运行上面的程序来检查输出:
FutureTask1 output=200 Waitng for futureTask2 for completion FutureTask2 output=800 Completed both the future task, shutting down the executors
这就是 Java FutureTask 示例的全部内容。
原文链接:https://codingdict.com/