线程池有哪几种工作队列?

常见的阻塞队列主要有以下几种:

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

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题