CompletableFuture.supplyAsync を介して LinkedBlockingQueue で ThreadPoolExecutor を使用する既存のアプリケーションにプライオリティ キューを追加しようとしています。問題は、PriorityBlockingQueue の Comparator でアクセスできるタスクの優先度を割り当てる設計を思いつかないことです。これは、私のタスクが CompletableFuture によって AsyncSupply という名前のプライベート 内部クラスのインスタンスにラップされ、元のタスクがプライベート フィールドに隠されるためです。Comparator は、次のように Runnables としてキャストされたこれらの AsyncSupply オブジェクトで呼び出されます。
public class PriorityComparator<T extends Runnable> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {
// T is an AsyncSupply object.
// BUT I WANT SOMETHING I CAN ASSIGN PRIORITIES TOO!
return 0;
}
}
CompletableFuture を拡張して別のオブジェクトにラップできるようにする可能性を調査しましたが、CompletableFuture の多くはカプセル化されていて継承できません。したがって、それを拡張することはオプションのようには見えません。非常に幅広いインターフェイスを実装しているため、アダプター内にカプセル化することもできません。
CompletableFuture全体をコピーして変更する以外に、この問題に対処する方法がわかりません。何か案は?