0

私はで作成しExecutorServiceています

ExecutorService executor = Executors.newFixedThreadPool(5);

と私は追加Runnablesします

executor.execute(runnable)

java.sql.Connection実行可能な実装内のどこかに作成され、finallyステートメント内で閉じられるインスタンスがあります。

これは、私が呼び出すまでは完全に機能しますexecutor.shutdownNow()。これを行うと、接続の値はnullとして取得されます。つまり、インスペクターが表示されますconnection = null。メソッドを使用してエグゼキュータを停止すると、shutdown()すべてが完全に機能します。

私は(Javaのソースコードでさえ)検索して読んでいますが、これを引き起こしている可能性があるものを理解できません。

私は捕まえようとしましたInterrupedExceptionが、どうやら何も投げられていません

4

1 に答える 1

0

望ましくない副作用については何もわかっていないshutdownNow()ため...
通常、 が新しいジョブを拒否し、ワーカー スレッドがキュー内の残りのジョブを終了するには、ashutdown()で十分なはずです。残念ながら、 (以前に送信されたすべてのジョブを完了させる) と(現在実行中のジョブを中断しようとする)ExecutorServiceの間にギャップがあるようです。ES が現在のジョブを終了できるようにする中間が必要ですが、まだ待機中のジョブは のように返します。shutdown()shutdownNow()shutdownAlmostNow()shutdownNow()


を使用する場合はThreadPoolExecutor、 を呼び出しshutdown()てジョブ キューを取得し、排出することができます。そのため、新しいジョブは受け入れられず、古いジョブはキューから削除されます。次に、現在のジョブの終了を待つことができます。

于 2013-01-09T23:22:41.637 に答える