スレッド プールの設計パターンの恩恵を受けるタスクがあります (多数の小さなタスクを並行して実行する必要があります)。私は最初に単純なスレッド プールをゼロから実装しました。n 個の Runnables はすべてConcurrentLinkedQueue、キューが空になるまでワーク ユニットをプルし、終了します。次に、「ねえ、Java で Executor を試してみましょう。私の素朴に設計されたシステムよりも、おそらくより適切にテストされ、信頼性が高いからです」と決めました。問題: 私の実装では、各スレッドは while を使用してキューが空になるまで存続し(!queue.isEmpty())、非スレッドセーフ オブジェクトの独自のインスタンスを取得しましたSlowObject foo。Runnableのプールに入るすべての を渡そうとするExecutorと、時間効率の悪いオブジェクトのインスタンスがスレッドセーフではないため失敗します。SlowObjectfor eachRunnableは構築にコストがかかるため望ましくありません。
SlowObject「使用しているスレッドの数は?スレッドごとに 1 つ作成し、実行中のスレッドを Runnables に検出させて、使用する正しいオブジェクトを検索させましょう?」と言う方法はありますか? これは脆弱で失敗しやすいように思えますが、代わりにどのデザイン パターンを調べればよいかわかりません。