1

次のように表現できる、純粋なJavaの「blackBox」を使用して画像を処理しています。

imageOut = imageProcess(imageIn);

これはループしています:

for (int i = 0; i < 1000; i++) {
    imageOut[i] = imageProcess(imageIn[i]);
}

ほとんどすべてのプロセスは 2 ~ 5 秒で終了しますが、いくつか (おそらく 2%) は何分間も実行され、一部は終了していないように見えます (理由はわかりません)。これらを(たとえば)30 秒後に終了し、病理画像を記録して、次に進みたいと思います。blackBox には I/O がありませんが、埋め込みThread.isInterrupted()などの方法もありません。

Thread.stop()30秒後にプロセスを強制終了するために使用できますか? もしそうなら、どうすればいいですか?[廃止されたことは認識していますが、別の方法が見つかりません。] または、変更せずに問題に取り組むより良い方法はありimageProcess()ますか?

本質的には、これをフィルターとして実行したいと思います:「処理に 30 秒以上かかるすべての画像を拒否する」。

更新: Peter Lawrey に続いて、私は調査中ProcessBuilderです。

彼は私が受け入れた Java >=1.8 の簡単な解決策を投稿しました。私は現在Java 1.7を使用しているため、以前のバージョンの単純なケースで機能する独自の回答を投稿しました。

4

2 に答える 2

3

最良のオプションは、ProcessBuilder を使用して新しいプロセスを開始することです。このプロセスがタイムアウトしたら、それを呼び出しdestroy()て、すべてのリソースがクリーンアップされることを知ることができます。(おそらく一時ファイルを除く)

于 2015-08-30T08:37:37.890 に答える