スレッドのキューの制御に問題があります。私のアプリケーションは、MySQL データベースを使用してデータの一部を読み取り、処理して画面に結果を表示します。キューには約 20 のタスクがありますが、一度に処理されているのは 1 つだけです。また、ユーザーは現在のキューをキャンセルし、データベースからデータの別の部分を「要求」する場合があります。現在、「最も古いポリシーを破棄する」で ThreadPoolExecutor を使用しています。これは、データの「最も古い」部分をキューから削除し、ユーザーが必要なときに「新しい」部分に置き換えるためです。私の問題は、corePoolSize が 1 に設定されていても、一度に 4 つのスレッドが実行される場合があることです。開始されていないタスクのキューをきれいに空にする方法がわかりません。今、私は getQueue() を使用してリストからすべての項目を削除していますが、それは悪い方法だと読みました。
結論:
1. ThreadPoolExecutor に一度に 1 つのタスクだけを強制的に実行させる方法はありますか?
2. タスクの重複を防ぐためにキューをチェックする方法 (文字列値で区別されます)?
3. キューから「古い」タスクをきれいに削除するには?
それとも、他のメカニズムを使用する必要がありますか?
どんな助けでも大歓迎です。