Aşağıdaki kodu bir varyasyonu vardır:Jenerik kodumu bu yöntem imzası ile nasıl uyumlu hale getirebilirim?
package com.test.package;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class TestClass {
public static class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Called");
}
}
public void method() {
PriorityBlockingQueue<MyRunnable> queue = new PriorityBlockingQueue<MyRunnable>();
method2(queue);
}
public void method2(BlockingQueue<? extends Runnable> queue) {
System.out.println(queue);
// Getting error here because BlockingQueue<? extends Runnable> is not a
// subtype of BlockingQueue<Runnable>.
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(200, 200, 0L,
TimeUnit.MILLISECONDS, queue);
}
}
Ve gördüğünüz gibi, benim kuyruk ThreadPoolExecutor
kurucu ile uyumlu değildir. Çevremde (BlockingQueue<Runnable>)
için sıraya göre çalışmak için herhangi bir yolu var mı? Açıkçası Java Standart Kütüphanesi'ni ekleyemiyorum.
Neden ilk etapta 'BlockingQueue' kullanıyorsunuz? –
Çünkü daha yüksek önceliğe sahip belirli runcables var. Karşılaştırma bölümünü örneğimde atladım çünkü bu soruyla ilgisiz. – Ztyx
Eğer ilgisizse, o zaman belki 'PriorityBlockingQueue' kullanabilirdiniz? Bunu yaparsanız 'PriorityBlockingQueue 'onları sıralamayı bırakmaz. –