16

ScheduledExecutorServiceを使用していますが、 shutdownメソッドを呼び出した後、Runnableをスケジュールできません。scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)afterを呼び出すと、 shutdown()java.util.concurrent.RejectedExecutionExceptionがスローされます。ScheduledExecutorServiceshutdown()で呼び出された後に新しいタスクを実行する別の方法はありますか?

4

3 に答える 3

48

スケジューラーは再利用できますが、シャットダウンしないでください。むしろ、scheduleAtFixedRateメソッドを呼び出すときに取得できる実行中のスレッドをキャンセルします。元:

//get reference to the future
Future<?> future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//cancel instead of shutdown
future.cancel(true);
//schedule again (reuse)
future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//shutdown when you don't need to reuse the service anymore
service.shutdown()
于 2011-10-24T16:49:47.250 に答える
6

言うのjavadocs shutdown()

Initiates an orderly shutdown in which previously submitted tasks are executed,
but no new tasks will be accepted.

そのため、新しいタスクを呼び出しshutdow()てスケジュールすることはできません。

于 2010-11-17T14:29:35.023 に答える
2

シャットダウンした後、エグゼキュータに新しいタスクを受け入れさせることはできません。より関連性の高い質問は、そもそもなぜそれをシャットダウンする必要があるのか​​ということです。作成したエグゼキュータは、アプリケーションまたはサブシステムの存続期間を通じて再利用する必要があります。

于 2011-10-24T17:02:35.883 に答える