帮别人做网站怎么赚钱,制作网页软件免费,贸易公司做网站有优势吗,中建八局第一建设有限公司设计院FutureTask是Java中的一个具体类#xff0c;它实现了RunnableFuture接口#xff0c;该接口结合了Runnable和Future的功能。FutureTask可以用于表示一个可以取消的异步计算。FutureTask非常适合用于与Executor框架一起使用#xff0c;但也可以单独使用。
FutureTask的基本用…FutureTask是Java中的一个具体类它实现了RunnableFuture接口该接口结合了Runnable和Future的功能。FutureTask可以用于表示一个可以取消的异步计算。FutureTask非常适合用于与Executor框架一起使用但也可以单独使用。
FutureTask的基本用法 使用Callable创建FutureTask FutureTask可以使用一个Callable对象来创建该Callable对象的call方法定义了任务的具体执行内容并可以返回结果。 使用Runnable创建FutureTask FutureTask也可以使用一个Runnable对象来创建不过Runnable对象不会返回结果。因此你通常还需要传递一个用于保存结果的对象。
示例代码
使用Callable创建FutureTask
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;public class FutureTaskExample {public static void main(String[] args) {// 创建一个Callable任务CallableInteger callableTask () - {Thread.sleep(2000);return 42;};// 使用Callable创建FutureTaskFutureTaskInteger futureTask new FutureTask(callableTask);// 创建一个ExecutorService实例ExecutorService executor Executors.newSingleThreadExecutor();// 提交FutureTask给ExecutorService执行executor.submit(futureTask);try {// 等待任务完成并获取结果Integer result futureTask.get();System.out.println(Result: result);} catch (InterruptedException | ExecutionException e) {e.printStackTrace();} finally {// 关闭ExecutorServiceexecutor.shutdown();}}
}使用Runnable创建FutureTask
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;public class FutureTaskWithRunnableExample {public static void main(String[] args) {// 创建一个Runnable任务Runnable runnableTask () - {try {Thread.sleep(2000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}System.out.println(Runnable task executed);};// 创建一个FutureTask并传递Runnable和结果对象FutureTaskVoid futureTask new FutureTask(runnableTask, null);// 创建一个ExecutorService实例ExecutorService executor Executors.newSingleThreadExecutor();// 提交FutureTask给ExecutorService执行executor.submit(futureTask);try {// 等待任务完成futureTask.get();System.out.println(FutureTask completed);} catch (InterruptedException | ExecutionException e) {e.printStackTrace();} finally {// 关闭ExecutorServiceexecutor.shutdown();}}
}FutureTask的其他功能 取消任务 FutureTask实现了Future接口因此可以使用cancel方法取消任务。 futureTask.cancel(true);检查任务是否完成 可以使用isDone方法检查任务是否完成。 if (futureTask.isDone()) {// 任务已完成
}检查任务是否被取消 可以使用isCancelled方法检查任务是否被取消。 if (futureTask.isCancelled()) {// 任务已取消
}总结
FutureTask结合了Runnable和Future的功能非常适合表示可取消的异步计算。可以使用Callable或Runnable对象创建FutureTask并提交给ExecutorService执行。FutureTask提供了取消任务、检查任务是否完成等功能使其在并发编程中非常有用。