我正在处理thread pool executor
,我在使用PriorityBlockingQueue
时发现它会在下面的代码中抛出ClassCastException
,如果我选择LinkedBlockingQueue
代替{PriorityBlockingQueue
,那么每件事都可以正常工作1}}在下面的代码中。
请帮助我理解这一点。
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 :(得分:2)
对于PriorityBlockingQueue,只要用户将指定的元素插入优先级队列,如果无法根据优先级队列的顺序将指定的元素与当前在优先级队列中的元素进行比较,则抛出ClassCastException。
但是,LinkedBlockingQueue不需要比较器。所以,没有任何例外。
此外,您可以在
中验证相同内容 LinkedBlockingQueue.offer() and PriorityBlockingQueue.offer()
方法可以更好地理解。