0

クラウド上のリモート マシンでタスクを開始するプログラム (スレッド) があります。このタスクの進行状況を監視したいのですが、特定のタイムアウト T を超えた場合はキャンセルされ、クラウド リソースが追加されてタスクが再開されます。

このタスクを実行しているスレッドを監視するにはどうすればよいですか?

シナリオ例:

  1. タイムアウト = 1 時間、タスクは 40 分で終了するため、すべてが正常に終了するはずです。

  2. タイムアウト = 1 時間、タスクはリソース不足のために 55 分後に失敗したため、さらにリソースが追加され、タスクが再び開始されます

  3. タイムアウト = 1 時間、タスクは 1 時間後に終了しなかったため、強制終了され、さらにリソースが追加された後、タスクが再び開始されます。

では、タイムリーな監視を Java で実装するにはどうすればよいでしょうか。

4

2 に答える 2

2

ScheduledThreadPoolExecutorあなたはまさにそれを行うクラスを探しています。

于 2013-07-23T17:44:29.410 に答える
2

タスクを ExecutorService に送信し、タイムアウトで結果を取得しようとし、タイムアウトがある場合はタスクをキャンセルできます。

次のようになります。

ExecutorService executor = Executors.newFixedThreadPool(1);
Future<?> future = executor.submit(yourTask);
try {
    future.get(1, TimeUnit.HOURS);
} catch (TimeoutException e) {
    future.cancel(true);
    resubmitWithMoreResources();
} catch (ExecutionException e) {
    Throwable underlyingCause = e.getCause();
    if (underlyingCause instanceof ResourceException) {
        resubmitWithMoreResources();
    } else {...}
}
于 2013-07-23T17:46:14.880 に答える