2012-03-13 11 views
0

バックグラウンド操作を実行するJavaファイルを呼び出します。バックグラウンドで実行中のスレッド(別のJavaファイル内)のため、JSPページに結果を返すことはできません。 returnとsystem.exit(0)は同時に使用できないことが知られています。表示されているJavaファイル内のスレッドを停止して結果を返しますか?バックグラウンドで実行中のスレッドを停止し、結果を返します。

答えて

1

あなたの質問をより慎重に定式化することで利益を得ることができます。 「スレッドは別のJavaファイルで実行されています」というようなものはありませんので、正確に何を意味するのかははっきりしません。

任意のスレッドを終了するためのJavaでは単純で安全な方法はありません。通常、最も簡単な方法はExecutorServiceを使用してジョブを送信し、後で結果を取得するかジョブの実行をキャンセルするために使用できる返されたFutureオブジェクトを保持することです。また、実行を待つことなくExecutorServiceをシャットダウンすることもできます。明らかに、あなたの仕事はこのような場合にはキャンセルを念頭に置いて書かれなければならないので、望ましくない副作用はありません。

0

try {...} catch(InterruptedException ex){...}ブロックにスレッドをラップする場合は、Thread.interrupt()メソッド(http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#interrupt())を使用できます。これは、割り込みハンドラにスレッドを送ります。そこでは、結果を返す前に必要なものを整理できます。

私はthread.isInterrupted()をチェックしている実行ループのどこかにある必要があり、もしそうならメインプログラムから.interrupt()を呼び出すときに割り込みハンドラのループを抜け出す必要があると思いますスレッドが割り込みハンドラにジャンプすることはありません。これに関するすべての詳細は私が先にリンクしたページにあります。

0

あなたの意図はあまり明確ではありませんが、Java FutureScheduledFutureのインタフェースとそれらを使用するマルチスレッドのクラスを見てみるとよいでしょう。

関連する問題