Executor.execute()方法是Java中Executor框架提供的一个用于提交任务的方法,它会立即返回并且不会等待任务执行的完成。因此,我们无法直接通过该方法确定由它启动的线程/任务是否完成。不过,我们可以使用一些其他的手段来实现这个功能。
一种常用的方式是使用一个自定义的FutureTask对象来包装任务,并调用FutureTask对象的get()方法来等待任务执行完成。FutureTask是一个可取消的异步计算,可以作为一个任务被提交给Executor执行。我们可以通过调用FutureTask的get()方法来获取任务的返回结果,该方法会一直阻塞直到任务执行完成。因此,我们可以利用这个特性来确定任务是否完成。具体代码如下:
import java.util.concurrent.*;
public class Example {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 创建Executor
Executor executor = Executors.newFixedThreadPool(1);
// 创建一个FutureTask对象,并传入任务
FutureTask<Integer> futureTask = new FutureTask<>(() -> {
// 任务的具体逻辑
// 这里只是一个示例,可以根据实际情况编写任务的逻辑
Thread.sleep(5000); // 模拟任务执行的耗时
return 42; // 任务的返回结果
});
// 提交任务给Executor执行
executor.execute(futureTask);
// 判断任务是否完成
if (futureTask.isDone()) {
// 任务已经完成
System.out.println("Task is done.");
} else {
// 任务还未完成
System.out.println("Task is not done.");
}
// 等待任务执行完成,并获取结果
Integer result = futureTask.get();
System.out.println("Result: " + result);
// 再次判断任务是否完成
if (futureTask.isDone()) {
// 任务已经完成
System.out.println("Task is done.");
} else {
// 任务还未完成
System.out.println("Task is not done.");
}
// 关闭Executor
((ExecutorService) executor).shutdown();
}
}
上述代码中,我们首先创建了一个Executor,这里使用了一个固定大小为1的线程池。然后,我们创建了一个FutureTask对象,并传入了任务的具体逻辑。接下来,我们通过executor.execute()方法将任务提交给Executor执行。通过调用futureTask.isDone()方法,我们可以判断任务是否完成。最后,我们调用futureTask.get()方法等待任务执行完成,并获取结果。
需要注意的是,Executor框架提供了更高级的接口ExecutorService,它继承了Executor接口,并且提供了更丰富的功能,比如可以提交Callable任务并获取返回结果。ExecutorService还可以通过调用submit()方法来提交任务,submit()方法返回一个Future对象,可以通过Future对象来获取任务的执行结果。相比之下,Executor框架的execute()方法没有提供获取任务执行结果的功能。
推荐的腾讯云相关产品:无
领取专属 10元无门槛券
手把手带您无忧上云