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();
}
}
は、あなたが実際に実行時に、または単にデバッグするために知っておく必要がありますか?
あなただけのデバッグしている場合は、(JDKの「ビン」ディレクトリにインストール)JVisualVMアプリケーションを見てみ考えます。いくつかの洞察を提供することができるはずですので、それは、あなたが動的に実行中のすべてのスレッドを検査することができます。
(JVisualVMも実行&割り当てホットスポットと、CPU /メモリプロファイリングを行い、リアルタイムで示すガベージコレクションアクティビティができる。)
所属していません StackOverflow