Estoy tratando de hacer un ThreadPoolExecutor con prioridad. Así defino unPriority ThreadPoolExecutor en Java (Android)
private static ThreadPoolExecutor threadpool = new ThreadPoolExecutor(30, MAXPOOL, MAXPOOL, TimeUnit.SECONDS,
queue, new mThreadFactory());
Así que la clave es la referencia de colas ahora. Pero cuando yo anuncio
static PriorityBlockingQueue<mDownloadThread> queue=new PriorityBlockingQueue<mDownloadThread>(MAXPOOL,new DownloadThreadComparator());
El compilador da un error en la primera línea: El constructor ThreadPoolExecutor (int, int, int, TimeUnit, PriorityBlockingQueue, FileAccess.mThreadFactory) no está definido con una sola quickfix: Cambiar el tipo de 'queue' a BlockingQueue. ¿Me puedes ayudar a entender cuál es el problema?
Gracias
Información adicional:
Para comparar los runnables I implementd la clase siguiente
class mDownloadThread implements Runnable{
private Runnable mRunnable;
private int priority;
mDownloadThread(Runnable runnable){
mRunnable=runnable;
}
@Override
public void run() {
mRunnable.run();
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
}
El comparador:
class DownloadThreadComparator implements Comparator<mDownloadThread>{
@Override
public int compare(mDownloadThread arg0, mDownloadThread arg1) {
if (arg0==null && arg1==null){
return 0;
} else if (arg0==null){
return -1;
} else if (arg1==null){
return 1;
}
return arg0.getPriority()-arg1.getPriority();
}
}
mDownloadThread implementa Runnable también. por lo que no debería ser un problema, ¿verdad? – Addev
No. Al igual que no se puede pasar una 'Lista' en una 'Lista
Al hacer esto, se pasan instancias de FutureTask al Comparador. Esto es legal porque se extiende desde Runnable. Sin embargo, no puedes obtener los atributos necesarios para una comparación del objeto en cuestión. Dolor real en el trasero – Mike