我敢肯定,我可以砍东西一起这将使我摸不着头脑,但我希望有出的现成的解决方案,我只是缺少。我读的文档,但我什么也没看见。

我的具体程序是使用由ThreadPoolExecutor支持的DelayQueue,虽然我不知道这事。

谢谢!

有帮助吗?

解决方案

我不认为这是一个可靠的方法来做到这一点。如果你想计数有可用的方法(getTaskCount()/ getCompletedTaskCount())的帮助。如果你需要那么实际的任务,据我所知,你需要手动保持的任务轨道,通过重写beforeExecute()和afterExecute()是单向的。

其他提示

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

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();
    }
}

你确实有必要知道在运行时,或者只是用于调试?

如果你只是调试,考虑采取看看JVisualVM应用程序(安装在JDK的“bin”目录)。它可以让你动态检查所有正在运行的线程,所以它应该能够为您提供一些见解。

(该JVisualVM还可以执行CPU /存储器分析,与执行分配和热点,并在实时显示垃圾收集活动。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top