FutureTask
是 Java 中用于异步计算的一个类。
FutureTask
实现了 RunnableFuture
接口,该接口继承自 Runnable
和 Future
接口。这意味着 FutureTask
既可以像 Runnable
一样被线程执行,又可以像 Future
一样获取异步任务的执行结果、检查任务是否完成、取消任务等操作。
以下是 FutureTask
的一些主要特点和用途:
-
异步执行任务
可以将一个耗时的计算或操作封装在FutureTask
中,并在单独的线程中执行,不会阻塞当前线程。 -
获取任务结果
通过get
方法获取任务的执行结果。如果任务尚未完成,get
方法会阻塞直到任务完成。 -
任务状态检查
可以使用isDone
方法检查任务是否已经完成,使用isCancelled
方法检查任务是否被取消。 -
取消任务
可以通过cancel
方法尝试取消任务的执行。
例如:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class FutureTaskExample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
FutureTask<Integer> futureTask = new FutureTask<>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
// 模拟耗时任务
Thread.sleep(3000);
return 42;
}
});
new Thread(futureTask).start();
// 等待任务完成并获取结果
Integer result = futureTask.get();
System.out.println("结果: " + result);
}
}
FutureTask
在多线程编程中非常有用,特别是在需要异步执行任务并获取其结果的场景中。
希望以上介绍对您有所帮助!如果您还有其他问题,请随时提问。