有一种简单的方法可以告诉Java Executor在给定时刻运行的任务吗?

Avi*_*lax 3 java concurrency executor executors

我确信我可以将一些东西放在一起,这可以让我弄清楚这一点,但我希望有一个我只是缺少的开箱即用的解决方案.我阅读了文档,但我没有看到任何内容.

我的特定应用程序使用的是a ThreadPoolExecutor支持DelayQueue,虽然我不确定这是否重要.

谢谢!

Vic*_*kin 10

一个简单的方法:用代码包装您的任务,这将调用新任务的回调信号开始,传递您希望它的所有数据:

interface StartTaskWatcher {
    void taskStarted(Object data);
}

class StartTaskSignalingWrapper implements Runnable {
    private final Runnable task;
    private final String taskDescription;
    private final StartTaskWatcher startTaskWatcher;

    StartTaskSignalingWrapper(Runnable task, String taskDescription, StartTaskWatcher startTaskWatcher) {
        this.task = task;
        this.taskDescription = taskDescription;
        this.startTaskWatcher = startTaskWatcher;
    }

    public void run() {
        startTaskWatcher.taskStarted(taskDescription);
        task.run();
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

我认为没有一种可靠的方法可以做到这一点.如果你想要计数,有可用的方法(getTaskCount()/ getCompletedTaskCount())有帮助.如果您需要实际任务,那么AFAIK需要手动跟踪任务,通过覆盖beforeExecute()和afterExecute()是一种方式.