import java.util.concurrent.*;
public class FutureTaskExample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 创建一个Callable任务,该任务会在执行后返回一个结果
Callable<Integer> task = () -> {
Thread.sleep(2000); // 模拟耗时操作
return 123; // 返回结果
};
// 创建一个FutureTask对象,传入Callable任务
FutureTask<Integer> futureTask = new FutureTask<>(task);
// 创建一个线程并启动它
Thread thread = new Thread(futureTask);
thread.start();
// 主线程可以继续执行其他操作
System.out.println("主线程在等待结果...");
// 获取任务的执行结果,如果任务还没有完成,则会阻塞直到任务完成
Integer result = futureTask.get();
System.out.println("任务执行结果: " + result);
}
}
Callable接口:Callable
接口类似于Runnable
,但它可以返回一个结果,并且可以抛出异常。这里我们定义了一个简单的Callable
任务,它模拟了一个耗时操作(Thread.sleep(2000)
),并在完成后返回一个整数结果(123
)。
FutureTask类:FutureTask
是一个包装类,它可以包装一个Callable
或Runnable
任务,并提供Future
接口的功能。通过FutureTask
,我们可以获取任务的执行结果、检查任务是否完成等。
线程启动:我们将FutureTask
传递给一个新线程,并启动该线程。这样,任务将在新线程中异步执行。
获取结果:使用futureTask.get()
方法来获取任务的执行结果。如果任务还没有完成,get()
方法会阻塞当前线程,直到任务完成并返回结果。
主线程继续执行:在等待任务结果的同时,主线程可以继续执行其他操作,例如打印一条消息。
这个例子展示了如何使用FutureTask
来异步执行任务并获取其结果。
下一篇:java 判断文件夹是否存在
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站