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

标签 java multithreading futuretask executors

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

相关文章:

java - 识别 AWT 线程

java - 将 Freemarker 转换为 PDF

java - 没有 onActivityResult 的 Activity 之间的 Android 通信

c# - 向现有 WaitAll 添加更多任务

java - 与 Java 线程的简单通信

java - 如何中断给定 Future 对象的线程?

android - 使用 FutureTask 调用 RESTful Web 服务

java - 在 Play 中启用断言!发展模式

java - 获取 Hashmap 前 3 个键

c# - 在 MVVM 中使用后台 worker 更新 ObservableCollection