09 | 队列:队列在线程池等有限资源池中的应用

Posted lakeslove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了09 | 队列:队列在线程池等有限资源池中的应用相关的知识,希望对你有一定的参考价值。

技术图片

 

 技术图片

 

 当队满时,(tail+1)%n=head。

技术图片

 

 技术图片

 

 

public class CircularQueue {
  // 数组:items,数组大小:n
  private String[] items;
  private int n = 0;
  // head表示队头下标,tail表示队尾下标
  private int head = 0;
  private int tail = 0;

  // 申请一个大小为capacity的数组
  public CircularQueue(int capacity) {
    items = new String[capacity];
    n = capacity;
  }

  // 入队
  public boolean enqueue(String item) {
    // 队列满了
    if ((tail + 1) % n == head) return false;
    items[tail] = item;
    tail = (tail + 1) % n;
    return true;
  }

  // 出队
  public String dequeue() {
    // 如果head == tail 表示队列为空
    if (head == tail) return null;
    String ret = items[head];
    head = (head + 1) % n;
    return ret;
  }
}

 

以上是关于09 | 队列:队列在线程池等有限资源池中的应用的主要内容,如果未能解决你的问题,请参考以下文章

线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?

数据结构与算法8-队列

线程池工作原理

JUC并发编程 共享模式之工具 线程池 -- 自定义线程池(阻塞队列)

线程池中的队列

Java实现锁公平锁读写锁信号量阻塞队列线程池等常用并发工具