线程池中workQueue的三种类型的区别

一、SynchronousQueue

SynchronousQueue没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列,会直接将任务交给消费者,必须等队列中的添加元素被消费后才能继续添加新的元素。使用SynchronousQueue阻塞队列一般要求maximumPoolSizes为无界,避免线程拒绝执行操作。

二、LinkedBlockingQueue

LinkedBlockingQueue是一个无界(没有大小限制)缓存等待队列。当前执行的线程数量达到corePoolSize的数量时,剩余的元素会在阻塞队列里等待,在使用此阻塞队列时maximumPoolSizes就相当于无效了。

三、ArrayBlockingQueue

ArrayBlockingQueue是一个有界缓存等待队列,可以指定缓存队列的大小,当线程数量大于corePoolSize时,多余的任务会缓存在ArrayBlockingQueue队列中等待有空闲的线程时继续执行;当ArrayBlockingQueue满时,则又会开启新的线程去执行,直到线程数量达到maximumPoolSize;当线程数已经达到最大的maximumPoolSize时,再有新的任务到达时会执行拒绝执行策略(RejectedExecutionException)。

    原文作者:wuychn
    原文地址: https://blog.csdn.net/qmqm011/article/details/100104325
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞