我有一个 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/