2017-06-16 4 views
0

Ich arbeite an thread pool executor, obeserverd ich, wenn ich PriorityBlockingQueue es im Code führt unter ClassCastException verwenden und alle Dinge funktionieren gut, wenn ich LinkedBlockingQueue statt PriorityBlockingQueue im Code unten wählen.LinkedBlockingQueue und PriorityBlockingQueue in ThreadPoolExecutor

Bitte helfen Sie mir, dies zu verstehen.

public class Test1 { 
     public static void main(String[] args) { 
      ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 10, TimeUnit.MINUTES, new PriorityBlockingQueue()); 
      executor.submit(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Thread.sleep(2000); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
      executor.submit(new Runnable() { 
       @Override 
       public void run() { 
       } 
      }); 
      executor.submit(new Runnable() { 
       @Override 
       public void run() { 
       } 
      }); 
     } 

    } 
+0

Warum machst du mehrere submit(), wenn die Ausnahme bei der ersten Iteration selbst ausgelöst wird. – GaurZilla

Antwort

2

Bei PriorityBlockingQueue, wenn Benutzer das angegebene Element in der Prioritätsschlange einfügt, wird Classcast geworfen wird, wenn das angegebene Element nicht mit Elementen zur Zeit in der Prioritäts-Warteschlange gemäß der Prioritätswarteschlange der Reihenfolge verglichen werden kann.

Es ist jedoch kein Vergleicher für LinkedBlockingQueue erforderlich. Also, es gab keine Ausnahme.

Darüber hinaus können Sie das gleiche in den

LinkedBlockingQueue.offer() and PriorityBlockingQueue.offer() Methoden für mehr Verständnis überprüfen.

Verwandte Themen