package Queue;
import java.util.NoSuchElementException;
/**
* 有界队列
*/
public class BQueue<T> {
private final T[] qArray;
private int front, rear;
private int capacity, count;
public BQueue(int size) {
capacity = size;
qArray = (T[]) new Object[capacity];
front = 0;
rear = 0;
count = 0;
}
public BQueue() {
this(50);
}
public boolean isEmpty() {
return count == 0;
}
public boolean isFull() {
return count == capacity;
}
public int size() {
return count;
}
public void push(T item) {
if(isFull())
throw new IndexOutOfBoundsException(
"Queue overflow");
qArray[rear] = item;
rear = (rear + 1) % capacity;
count++;
}
public T pop() {
if(isEmpty())
throw new NoSuchElementException(
"Empty queue");
T tmp;
tmp = qArray[front];
front = (front + 1) % capacity;
count--;
return tmp;
}
public static void main(String[] args) {
BQueue<String> b = new BQueue<String>(10);
b.push("A");
b.push("B");
b.push("C");
//System.out.println(b.size()); // 3
try {
while(!b.isEmpty())
System.out.println(b.pop());
} catch(NoSuchElementException e) {
System.err.println("Empty queue");
}
}
}
分享到:
相关推荐
它的设计目标是替代传统的有界队列,提供更高的吞吐量和更低的延迟。Disruptor 的核心在于其创新的数据交换机制,包括使用栅栏(barrier)和序号(Sequencing)来协调生产者和消费者,避免了锁和CAS操作带来的开销。...
主要介绍了Java中有界队列的饱和策略(reject policy)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
如果任务数量有限,可使用有界队列防止资源耗尽。 接下来是队列,队列是一种数据结构,遵循先进先出(FIFO)原则。在多线程环境下,队列常用于线程间的通信和任务调度。队列的种类繁多,例如: - **阻塞队列...
生产者在队列满时会被阻塞,直到队列有空间时再继续生产;消费者在队列空时也会被阻塞,直到队列中有元素时再继续消费。这种机制避免了传统的wait和notify方法中复杂的循环检查和条件判断,大大简化了并发编程的复杂...
二维码QR可以帮助您创建和使用Redis的队列,上限收集(有界队列),双端队列和堆栈数据结构。 Redis非常适合这些抽象数据结构的实现,QR使使用Python中的结构更加容易。快速设置你会需要: -2.0或更高版本默认情况下...
2. **LinkedBlockingQueue**:基于链表结构实现的无界阻塞队列,也可通过构造函数指定容量大小变为有界队列。 3. **PriorityBlockingQueue**:支持按优先级排序的无界阻塞队列。 4. **DelayQueue**:基于优先级队列...
2. **队列实现**:接着可能会讲解几种具体的阻塞队列实现,比如`ArrayBlockingQueue`是基于数组的有界队列,`LinkedBlockingQueue`基于链表,以及`PriorityBlockingQueue`是无界的优先级队列,它们各自的特点和适用...
本实例中使用了`ArrayBlockingQueue`,这是最常用的阻塞队列实现之一,它是一个有界队列,能够按FIFO(先进先出)的顺序处理元素。创建`ArrayBlockingQueue`时,需要指定队列的容量,这有助于防止内存溢出,因为队列...
Disruptor是一种高性能的并发数据交换框架,由Martin Thompson、Dave Farley、Michael Barker、Patricia Gee和Andrew Stewart共同开发,主要用于替代传统的有界队列。这个框架的诞生源于LMAX公司在构建高性能金融...
2. **LinkedBlockingQueue**:基于链表实现的有界队列,队列的大小默认为Integer.MAX_VALUE,同样遵循FIFO原则。相比于ArrayBlockingQueue,它的吞吐量通常更高,但在空间占用上更大。 3. **SynchronousQueue**:一...
2. **有界队列(Bounded Queue)**:如`ArrayBlockingQueue`,队列容量有限,超过容量时,新提交的任务会阻塞,直到队列中有空位。这种方式能限制线程池的规模,防止资源耗尽,但可能会增加任务等待时间。 3. **...
而后者,特别是循环队列,更适合有界队列,它避免了数据搬移,提高了性能。 循环队列在Disruptor的设计中扮演着关键角色。相比于非循环队列,循环队列通过巧妙的索引计算避免了数据移动,极大地提升了添加和删除...
Disruptor是由LMAX公司开发的一种创新的并发编程解决方案,旨在替代传统的有界队列,以实现极低延迟和高吞吐量的数据交换。该方案由Martin Thompson、Dave Farley、Micheal Barker、Patricia Gee和Andrew Stewart...
无锁有界无阻塞发布订阅队列(Sub-Sub Queue)这是一个发布订阅模式队列,在该队列中,发布者永远不会被慢速订阅者阻止。 无锁有界非阻塞发布订阅队列(Sub-Sub Queue)这是一个发布订阅模式队列,在该队列中,发布...
对于有界阻塞队列,我们需要添加一个条件变量来判断队列是否满。当队列满时,生产者线程将被阻塞,直到消费者线程将数据从队列中取出。 在给定的代码中,我们使用 std::mutex、std::condition_variable 和 std::...
例如,如果你需要一个有界队列并且对性能要求较高,可以选择ArrayBlockingQueue;如果需要动态调整队列大小,可以使用LinkedBlockingQueue。 总之,BlockingQueue是Java并发编程中的核心组件,它的设计理念和实现...
是单一生产者,单一消费者的有界队列。 推送和弹出无需等待。 是一个多生产者,单消费者有界队列。 弹出无需等待。 是一个多生产者,多消费者的有界队列。 API文档: : 注意:如果您的项目是使用--threads:off...
常见的工作队列类型有无界队列(如`LinkedBlockingQueue`)和有界队列(如`ArrayBlockingQueue`)。无界队列会导致线程池无限增长,而有界队列可以限制并发任务的数量,防止资源耗尽。 在实际应用中,合理配置...
Java并发编程常见知识点源码集锦,涉及到对象锁,Executors多任务线程框架,线程池等... ConcurrentLinkedQueue、DelayQueue示例、自定义的线程拒绝策略、自定义线程池(使用有界队列)、自定义线程池(使用无界队列)。。。
5. **LinkedBlockingQueue**:`java.util.concurrent.LinkedBlockingQueue` 是一个线程安全的有界队列,基于链接节点实现。它的大小可以指定,不指定则默认为Integer.MAX_VALUE。插入和删除操作的时间复杂度为O(1),...