4

しばらくの間、頭がおかしくなっている問題があり、あなたの集合的な知恵に相談する必要があります.

Executors.newFixedThreadPool から呼び出された、プールが 1 の ThreadPoolExecutor があります。executor.shutdown() は別のスレッドから呼び出されるため、すべての executor.execute() を !isShutdown() で保護します。したがって、executor は RejectedExecutionException をスローしないと言えます。それにもかかわらず、これは私がランダムに見ているものです。

なぜ私がこの動作を見ているのか、誰にも良い考えがありますか?

4

2 に答える 2

1

同期されていない「if then act」アプローチが Java で機能しない方法/理由を理解するために、ダブルチェック ロックに関する記事を読むことができます。

好奇心から、仕事が却下されるかどうかわざわざチェックするのはなぜですか? これが以前に行われたのを見たのを思い出せません。代わりに、スローされた RejectedExecutionExceptions をキャッチして処理してみませんか?

また、他のエラー状態、特にシャットダウンが呼び出されたときにキューで実行中または待機中のタスクの処理方法にも注意してください。Java Concurrency in Practice の第 7 章には、これに関する有益な情報がたくさんあります。

于 2011-06-28T02:27:30.510 に答える
0

http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ThreadPoolExecutor.htmlで詳しく説明されている、実行が拒否される他の理由があります

ほとんどの場合、キューが限界に達しました。

于 2011-06-28T01:05:53.573 に答える