1

いくつかの静的分析に SOOT フレームワークを使用しています。ただし、分析に数時間かかる場合があり、タイムアウトを設定して分析を停止し、別のプログラムで続行したい場合があります。

そのような動作を実現するために、スレッドで分析を実行します。

thread = new Thread(new Runnable() { run(){ buildCallgraph(); } )};

!! buildCallgraph() メソッドは SOOT によって提供されており、変更する機会がありません。!!

現在、スレッドを停止する方法がわかりません。buildCallgraph() はスレッドが中断されたかどうかを決してチェックしないため、Interrupt は機能しません。Thread.stop() は使用しないでください。

では、スレッドを終了する方法を知っている人はいますか?

よろしくロバート

4

3 に答える 3

1

を使用しない十分な理由があるThread.stop()ため、別のアプローチはどうでしょうか。分析を別のスレッドで実行する代わりに、別のプログラムとして実行してみてください

これは小さなパフォーマンス ヒットを意味しますが、実用的には、タスクの作成と結果のシリアル化/逆シリアル化は、現在のタイミングのスケールと比較して測定可能な影響を与えるべきではありません。

とは異なりThread.stop()、プログラムを強制終了すると、jvm が終了するため、正常に終了します。

これの欠点は、フォローアップの質問 (「Java プログラム内からタスクを開始する方法」、「別のプログラムの完了を待つ方法」、「別のプログラムをプログラムで強制終了する方法」) への回答です。 ) はすべてオペレーティング システムに固有です。

利点は、それらがすでに回答されていることです。

  1. Java プログラム内で外部プログラムを起動する方法
  2. Java: 終了するまで exec プロセスを待ちます
  3. 子プロセスを強制終了する Java ツール/メソッド
于 2013-10-21T18:19:45.383 に答える