gpt4 book ai didi

java - 如何进入 FutureTask 执行状态?

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:02 25 4
gpt4 key购买 nike

我有一个 singleThreadExecutor 以便按顺序执行我提交给它的任务,即一个任务接一个任务,没有并行执行。

我有 runnable,它是这样的

MyRunnable implements Runnable {

@Override
public void run() {
try {
Thread.sleep(30000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}

例如,当我向上述单线程执行器提交 MyRunnable 的三个实例时,我希望第一个任务执行,因为 Thread.sleep 在 TIMED_WAITING 中有它的执行线程(我可能错了关于具体状态)。其他两个任务不应该分配线程来执行它们,至少在第一个任务完成之前不应该。

所以我的问题是如何通过 FutureTask API 获取此状态或以某种方式获取正在执行任务的线程(如果没有这样的线程则任务正在等待执行或挂起)并获取其状态或也许通过其他方式?

FutureTask 只定义了isCanceled() 和isDone() 方法,但这些方法不足以描述Task 的所有可能执行状态。

最佳答案

您可以将您提交给此服务的任何内容包装在 Runnable 中,该文件记录何时输入其运行方法。

public class RecordingRunnable implements Runnable {
private final Runnable actualTask;
private volatile boolean isRunning = false;
//constructor, etc

public void run() {
isRunning = true;
actualTask.run();
isRunning = false;
}

public boolean isRunning() {
return isRunning;
}
}

关于java - 如何进入 FutureTask 执行状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6933219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com