「PriorityThreadPoolExecutor」を実装しようとしています。
だから私は Executor を宣言します:
static ThreadPoolExecutor threadPool =
new ThreadPoolExecutor(2, 100, 100, TimeUnit.SECONDS, queue);
優先順位付けの鍵は、キュー パラメータです。基本的には PriorityBlockingQueue が必要なので、コンストラクターを使用します。
PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator);
queue = new PriorityBlockingQueue<mRunnable>(10,
new Comparator<mRunnable>() {
@Override
public int compare(mRunnable lhs, mRunnable rhs) {
return rhs.getPriority()-lhs.getPriority();
}
});
mRunnable の場所:
public interface mRunnable extends Runnable {
public int getPriority();
}
しかし、ここでコンパイラは不平を言います:
Type mismatch: cannot convert from PriorityBlockingQueue<mRunnable>
to PriorityBlockingQueue <Runnable>
mRunnable が Runnable を拡張したときにこのエラーが発生する理由がわかりません。
コンパレータを変更してパッチを当てることができます:
new Comparator<Runnable>() {
@Override
public int compare(Runnable lhs, Runnable rhs) {
if (lhs instanceof mRunnable && rhs instanceof mRunnable){
return ((mRunnable)rhs).getPriority()-((mRunnable)lhs).getPriority();
}
return 0;
}
});
しかし、これは醜い解決策です。
タイプの不一致が発生している理由を説明できますか? ありがとう