我確定我可以一起破解一些能夠解決這個問題的東西,但我希望有一個我剛剛失蹤的開箱即用解決方案。我閱讀了文檔,但沒有看到任何內容。有沒有一種簡單的方法可以告訴Java執行程序在給定時刻正在運行哪些任務?
我的具體程序是使用由DelayQueue
支持的ThreadPoolExecutor
,雖然我不知道這事。
謝謝!
我確定我可以一起破解一些能夠解決這個問題的東西,但我希望有一個我剛剛失蹤的開箱即用解決方案。我閱讀了文檔,但沒有看到任何內容。有沒有一種簡單的方法可以告訴Java執行程序在給定時刻正在運行哪些任務?
我的具體程序是使用由DelayQueue
支持的ThreadPoolExecutor
,雖然我不知道這事。
謝謝!
我不認爲這是一個可靠的方法來做到這一點。如果你想計數有方法可用(getTaskCount()/ getCompletedTaskCount())哪些幫助。如果你需要實際的任務,那麼AFAIK你需要手動跟蹤任務,重寫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();
}
}
好的建議,好的代碼,謝謝! – 2011-01-06 00:39:19
你確實有必要知道在運行時,或只是爲了調試?
如果您只是在調試,請考慮查看JVisualVM應用程序(安裝在JDK的'bin'目錄中)。它可以讓你動態地檢查所有正在運行的線程,所以它應該能夠爲你提供一些見解。
(該JVisualVM還可以進行CPU /內存分析,以執行&分配的熱點,並顯示實時垃圾收集活動。)
我實際上在運行時需要它,用於監視和故障排除。好消息,謝謝! – 2011-01-06 00:37:56
非常直接,直接回答我的問題。謝謝! – 2011-01-06 00:37:33