`
baby69yy2000
  • 浏览: 187843 次
  • 性别: Icon_minigender_1
  • 来自: 自己输入城市...
社区版块
存档分类
最新评论

有界队列

    博客分类:
  • Util
阅读更多
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 一种可替代有界队列完成并发线程间数据交换高性能解决方案.docx

    它的设计目标是替代传统的有界队列,提供更高的吞吐量和更低的延迟。Disruptor 的核心在于其创新的数据交换机制,包括使用栅栏(barrier)和序号(Sequencing)来协调生产者和消费者,避免了锁和CAS操作带来的开销。...

    Java中有界队列的饱和策略(reject policy)原理解析

    主要介绍了Java中有界队列的饱和策略(reject policy)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    线程池&&队列各类区别使用场景

    如果任务数量有限,可使用有界队列防止资源耗尽。 接下来是队列,队列是一种数据结构,遵循先进先出(FIFO)原则。在多线程环境下,队列常用于线程间的通信和任务调度。队列的种类繁多,例如: - **阻塞队列...

    并发-线程池和阻塞队列.pdf

    生产者在队列满时会被阻塞,直到队列有空间时再继续生产;消费者在队列空时也会被阻塞,直到队列中有元素时再继续消费。这种机制避免了传统的wait和notify方法中复杂的循环检查和条件判断,大大简化了并发编程的复杂...

    qr:Python中使用Redis的队列,堆栈,双端队列和优先级队列

    二维码QR可以帮助您创建和使用Redis的队列,上限收集(有界队列),双端队列和堆栈数据结构。 Redis非常适合这些抽象数据结构的实现,QR使使用Python中的结构更加容易。快速设置你会需要: -2.0或更高版本默认情况下...

    10、阻塞队列BlockingQueue实战及其原理分析.pdf

    2. **LinkedBlockingQueue**:基于链表结构实现的无界阻塞队列,也可通过构造函数指定容量大小变为有界队列。 3. **PriorityBlockingQueue**:支持按优先级排序的无界阻塞队列。 4. **DelayQueue**:基于优先级队列...

    阻塞队列实现生产者消费者模式Java开发Java经验技巧共

    2. **队列实现**:接着可能会讲解几种具体的阻塞队列实现,比如`ArrayBlockingQueue`是基于数组的有界队列,`LinkedBlockingQueue`基于链表,以及`PriorityBlockingQueue`是无界的优先级队列,它们各自的特点和适用...

    java学习(基于Java阻塞队列的搜索实例).pdf

    本实例中使用了`ArrayBlockingQueue`,这是最常用的阻塞队列实现之一,它是一个有界队列,能够按FIFO(先进先出)的顺序处理元素。创建`ArrayBlockingQueue`时,需要指定队列的容量,这有助于防止内存溢出,因为队列...

    Disruptor:一种高性能的、在并发线程间数据交换领域用于替换有界限队列的方案

    Disruptor是一种高性能的并发数据交换框架,由Martin Thompson、Dave Farley、Michael Barker、Patricia Gee和Andrew Stewart共同开发,主要用于替代传统的有界队列。这个框架的诞生源于LMAX公司在构建高性能金融...

    day19_阻塞队列、线程池、File类、递归.pdf

    2. **LinkedBlockingQueue**:基于链表实现的有界队列,队列的大小默认为Integer.MAX_VALUE,同样遵循FIFO原则。相比于ArrayBlockingQueue,它的吞吐量通常更高,但在空间占用上更大。 3. **SynchronousQueue**:一...

    线程池调用队列

    2. **有界队列(Bounded Queue)**:如`ArrayBlockingQueue`,队列容量有限,超过容量时,新提交的任务会阻塞,直到队列中有空位。这种方式能限制线程池的规模,防止资源耗尽,但可能会增加任务等待时间。 3. **...

    54丨算法实战(三):剖析高性能队列Disruptor背后的数据结构和算法1

    而后者,特别是循环队列,更适合有界队列,它避免了数据搬移,提高了性能。 循环队列在Disruptor的设计中扮演着关键角色。相比于非循环队列,循环队列通过巧妙的索引计算避免了数据移动,极大地提升了添加和删除...

    Disruptor:一种高性能的、在并发线程间数据交换领域用于替换有界限队列的方案.pdf

    Disruptor是由LMAX公司开发的一种创新的并发编程解决方案,旨在替代传统的有界队列,以实现极低延迟和高吞吐量的数据交换。该方案由Martin Thompson、Dave Farley、Micheal Barker、Patricia Gee和Andrew Stewart...

    bus_queue-无锁有界非阻塞发布订阅队列-Rust开发

    无锁有界无阻塞发布订阅队列(Sub-Sub Queue)这是一个发布订阅模式队列,在该队列中,发布者永远不会被慢速订阅者阻止。 无锁有界非阻塞发布订阅队列(Sub-Sub Queue)这是一个发布订阅模式队列,在该队列中,发布...

    c++11 实现的阻塞队列

    对于有界阻塞队列,我们需要添加一个条件变量来判断队列是否满。当队列满时,生产者线程将被阻塞,直到消费者线程将数据从队列中取出。 在给定的代码中,我们使用 std::mutex、std::condition_variable 和 std::...

    简单实现BlockingQueue,BlockingQueue源码详解

    例如,如果你需要一个有界队列并且对性能要求较高,可以选择ArrayBlockingQueue;如果需要动态调整队列大小,可以使用LinkedBlockingQueue。 总之,BlockingQueue是Java并发编程中的核心组件,它的设计理念和实现...

    lockfreequeues:Nim的无锁队列实现

    是单一生产者,单一消费者的有界队列。 推送和弹出无需等待。 是一个多生产者,单消费者有界队列。 弹出无需等待。 是一个多生产者,多消费者的有界队列。 API文档: : 注意:如果您的项目是使用--threads:off...

    java_thread_cn.rar_Java 线程池_java thread books_java线程_线程池_线程池调度

    常见的工作队列类型有无界队列(如`LinkedBlockingQueue`)和有界队列(如`ArrayBlockingQueue`)。无界队列会导致线程池无限增长,而有界队列可以限制并发任务的数量,防止资源耗尽。 在实际应用中,合理配置...

    Java并发编程相关源码集 包括多任务线程,线程池等.rar

    Java并发编程常见知识点源码集锦,涉及到对象锁,Executors多任务线程框架,线程池等... ConcurrentLinkedQueue、DelayQueue示例、自定义的线程拒绝策略、自定义线程池(使用有界队列)、自定义线程池(使用无界队列)。。。

    Java数据结构实现之Queue.zip

    5. **LinkedBlockingQueue**:`java.util.concurrent.LinkedBlockingQueue` 是一个线程安全的有界队列,基于链接节点实现。它的大小可以指定,不指定则默认为Integer.MAX_VALUE。插入和删除操作的时间复杂度为O(1),...

Global site tag (gtag.js) - Google Analytics