在网站做责编会很累吗什么是网络营销的核心
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任务Callable<Integer> callableTask = () -> {Thread.sleep(2000);return 42;};// 使用Callable创建FutureTaskFutureTask<Integer> 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和结果对象FutureTask<Void> 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
提供了取消任务、检查任务是否完成等功能,使其在并发编程中非常有用。