线程池有哪几种工作队列?
线程池有哪几种工作队列?
常见的阻塞队列主要有以下几种:
ArrayBlockingQueue:ArrayBlockingQueue是一个基于数组实现的有界阻塞队列,按照先进先出(FIFO)的顺序进行排序。
LinkedBlockingQueue:LinkedBlockingQueue是一个基于链表结构的阻塞队列,按照先进先出(FIFO)的顺序进行排序。它可以选择设置容量,如果不设置容量,则默认是一个无边界的阻塞队列,最大长度为Integer.MAX_VALUE。newFixedThreadPool线程池使用了这个队列。DelayQueue:DelayQueue是一个延迟执行任务的队列,根据指定的执行时间进行排序,时间最小的任务优先执行。如果没有设置执行时间,按照插入到队列的先后顺序进行排序。newScheduledThreadPool线程池使用了这个队列。PriorityBlockingQueue:PriorityBlockingQueue是一个具有优先级的无界阻塞队列,元素按照优先级进行排序。SynchronousQueue:SynchronousQueue是一个不存储元素的阻塞队列,每个插入操作必须等待另一个线程的移除操作,否则插入操作将一直处于阻塞状态。吞吐量通常比LinkedBlockingQueue更高。newCachedThreadPool线程池使用了这个队列。