6

Runnable を実装するクラスのいくつかのオブジェクトをスケジュールするために、ScheduledThreadPoolExecutor.schedule(Runnable,int,TimeUnit) を使用しています。

ある時点で、アプリケーションがシャットダウンし、ScheduledThreadPoolExecutor.shutdownNow()を使用します。ドキュメントによると、ScheduledFuture のリストを返します。

私が本当にやりたいことは、最初にスケジュールしたオブジェクトを取得し、そこから少しのデータを取得して、実行できなかったことを出力することです。これは、後でアプリケーションがバックアップを開始するときに実行を試みるために使用されます。

4

2 に答える 2

2

エグゼキューターに送信されたオブジェクトに関する情報を取得する通常の方法は、元のオブジェクトへのポインターを維持することです (Callable、Runnable などの拡張機能)。shutdownNow() を呼び出した後、実行を待っていた Runnable によって返された Runnable を考慮に入れると、それを使用して元のオブジェクトのリストを整理し、実際に実行されたオブジェクトを調べることができます。

于 2011-01-21T00:17:12.643 に答える
2

ユーザーに情報を表示するだけの場合、最も簡単な方法は、スケジュールしている sに意味のあるtoString()メソッドを実装することです。Runnable次に、与えられたリストを単純に繰り返し、Executor取得したものをログに記録できます。

しかし悲しいことに、元のオブジェクトは でラップされExecutorます。Executor次に、手動でに渡すもののリストを保持し、Runnable実行時に s がこのリストから自分自身を削除できるようにする必要があります。明らかに、この目的のためにスレッドセーフ リストを使用する必要があります。

于 2011-01-21T00:24:43.463 に答える