2016-06-29 9 views
0

ウェブを調査した後、私は答えを見つけることができなかったので、ここで誰かができることを願っています。各スレッドで複数のタスクを実行するエグゼキュータサービス

私はexecutorserviceを複数のスレッドで実行しています(簡略化のために2としましょう)。各スレッドで、私はそれに多くのテストを実行するrunnableを提出しています。これらのテストでは、コンピュータ上のソフトウェアを使用します。

私のシナリオでは、どのスレッドでもテストが失敗した場合、コンピュータ上でソフトウェアを再起動する必要があります。

スレッド1のテストでソフトウェアを再起動する必要がある場合 - 2番目のスレッドの作業を一時停止する必要があります(すべてのスレッドは基本的にスレッド1を含めて一時停止する必要があります)。

2番目のスレッドでは、ソフトウェアを使用してテストを行っている可能性があります。そのため、実行中のテストを終了します。次のテストをスレッド/スレッド自体を一時停止します。ソフトウェアを再起動します。 。

私は試したことがありますが実装方法はわかりません。これらの動画のJohnのすべてのオファー:Advanced Java: Multi-threading

ご協力いただきありがとうございます。

+0

だから、タスクが失敗したときにshutdownNow()スレッドプールを使いたいのですか? –

答えて

0

ScheduledThreadPoolExecutorをご覧ください。

あなたのソフトウェアの状態(一時停止/実行)を保存する(同時性を考慮して)シングルトンのインスタンスを実装することができます。また、Runnableテストのそれぞれについて、実行。状態が保留になっている場合は、小さな遅延でタスクを再スケジュールします(ソフトウェアの再起動時間を評価する)。つまり、あなたは確かにあなたのタスクのコンストラクタの入力パラメータをServiceExecutorに渡す必要があります(そして変数として格納してください)。

+0

OPは既にExecutoreServiceを使用していますが、スケジュールされたものを使用するとどのように違いが生じるのでしょうか? –

+0

タスクは 'execute'の代わりに' schedule'を使って2回目以降のタスクを実行する必要があります。 'ExecutorService'ではこれを行うことはできません。 –

+0

私はscheduleAt ...を繰り返し使用する必要があることに同意します。私はそれはOPが尋ねたものだとは分かりません。 –

関連する問題