Prioridad ThreadPoolExecutor en Java (Android)

Estoy tratando de hacer un ThreadPoolExecutor con prioridad. Así que defino un

private static ThreadPoolExecutor threadpool = new ThreadPoolExecutor(30, MAXPOOL, MAXPOOL, TimeUnit.SECONDS, queue, new mThreadFactory()); 

Así que la clave es la referencia de cola ahora. Pero cuando declaro:

 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) está indefinido con un solo quickfix: Cambie el tipo de 'cola' a BlockingQueue . ¿Me puede ayudar a entender cuál es el problema?

Gracias

Información adicional:

Para comparar los runnables implementé la siguiente clase

 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(); } } 

ThreadPoolExecutor constructor ThreadPoolExecutor acepta BlockingQueue<Runnable> y no BlockingQueue<? extends Runnable> BlockingQueue<? extends Runnable> , por lo que no se puede pasar a él PriorityBlockingQueue<mDownloadThread> instancia.

Puede cambiar el tipo de queue a PriorityBlockingQueue<Runnable> , pero en ese caso no podrá implementar Comparator<mDownloadThread> sin la conversión dentro del método de compare .

La otra solución es omitir la comprobación genérica de tipos, pero sería su responsabilidad enviar sólo instancias de mDownloadThread para execute método:

 static ThreadPoolExecutor threadpool = new ThreadPoolExecutor(30, MAXPOOL, MAXPOOL, TimeUnit.SECONDS, (PriorityBlockingQueue) queue, new mThreadFactory()); 

El problema es que ThreadPoolExecutor está esperando un BlockingQueue<Runnable> y está pasando un PriorityBlockingQueue<mDownloadThread> . El PriorityBlockingQueue implementa BlockingQueue para que no sea el problema. El problema es el Runnable . No se puede pasar un tipo genérico de mDownloadThread donde Runnable se esperaba.

El arreglo es el siguiente:

 static PriorityBlockingQueue<Runnable> queue=new PriorityBlockingQueue<Runnable>(MAXPOOL,new DownloadThreadComparator()); 

Un

 class DownloadThreadComparator implements Comparator<Runnable>{ 

Si ThreadPoolExecutor se escribió para aceptar un BlockingQueue<? extends Runnable> BlockingQueue<? extends Runnable> lo que tiene que trabajar.

  • RxJava - subir archivos secuencialmente - emitir el siguiente elemento, cuando onNext llamado
  • Android Runtime Logcat solo obtiene la instancia actual
  • La mejor manera de ejecutar el método asincrónicamente en Android (compacto y correcto)
  • ¿La imagen tarda demasiado en cargarse?
  • Para forzar la cancelación AsyncTask no debería el indicador periódicamente marcado en doInBackground ser volátil?
  • Pasar un valor de la actividad a hilo después de hilo ya está creado
  • Los animadores sólo se pueden ejecutar en temas Looper Android
  • Acceso a la interfaz de usuario de JavaScript en Android
  • Múltiples temas en la actividad / servicio de Android
  • Hilo de fondo que bloquea la interfaz de usuario durante varios segundos
  • ¿Comunicación Bluetooth en hilo o servicio en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.