有一个简单的方法告诉什么任务一个Java执行器在给定时刻运行?
-
25-09-2019 - |
题
我敢肯定,我可以砍东西一起这将使我摸不着头脑,但我希望有出的现成的解决方案,我只是缺少。我读的文档,但我什么也没看见。
我的具体程序是使用由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 /存储器分析,与执行分配和热点,并在实时显示垃圾收集活动。)
不隶属于 StackOverflow