`
xiangxingchina
  • 浏览: 520006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

阻塞队列的简单实现

 
阅读更多
/** 
 * @author luxiangxing 
 * @time   2017-05-06 
 * @email  xiangxingchina@163.com 
 * @tel    15330078427 
 */  
public class BlockingQueue<E> {
	private List<E> queue = new LinkedList<E>();
	private int limit = 10;
	
    public BlockingQueue(int limit) {
		this.limit = limit;
	}

	public synchronized void put(E e) throws InterruptedException {
		while (this.queue.size() == this.limit) { 
			wait();
		}
		if (this.queue.size() == 0) {
			notifyAll();
		}
		this.queue.add(e);
	}

	
	public synchronized E get() throws InterruptedException {
		while (this.queue.size() == 0) { 
			wait();
		}
		if (this.queue.size() == this.limit) {
			notifyAll();
		}
		return this.queue.remove(0);
	}
}

 

分享到:
评论

相关推荐

    Java实现简单的阻塞队列2种方式

    本文将探讨两种实现简单阻塞队列的方法:使用`wait()`和`notify()`以及使用`CountDownLatch`。 1. 使用`wait()`和`notify()`: `wait()`和`notify()`是Java中`Object`类的方法,它们是线程间通信的核心。在同步...

    java模拟阻塞队列

    例如,一个简单的模拟阻塞队列的代码实现可能如下: ```java import java.util.concurrent.*; public class BlockingQueueExample { public static void main(String[] args) { // 创建一个固定大小的阻塞队列 ...

    java阻塞队列实现原理及实例解析.docx

    在提供的代码实例中,我们看到了一个简单的阻塞队列实现,使用了`LinkedList`作为底层数据结构,并通过`synchronized`关键字来实现线程安全。`enqueue`方法用于向队列尾部添加元素,`dequeue`方法用于从队列头部移除...

    java阻塞队列实现原理及实例解析

    下面是一个简单的阻塞队列实现例子: ```java public class BlockingQueue { private List queue = new LinkedList(); private int limit = 10; public BlockingQueue(int limit) { this.limit = limit; } ...

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

    例如,在一个简单的生产者-消费者模型中,生产者不断生成数据并放入阻塞队列,而消费者不断地从阻塞队列中取出数据进行处理。这种模型能够有效地平衡生产者和消费者的速率,避免资源浪费和竞争条件的发生。 #### 五...

    高性能阻塞队列的数据结构创新.pptx

    - 传统阻塞队列通常采用锁或原子操作实现同步,这些机制可能导致线程竞争,进而降低吞吐量。 - 锁和原子操作会产生上下文切换开销,显著增加延迟,特别是在高并发环境下。 - 频繁的同步操作会导致CPU资源争用,...

    Java并发编程(21)并发新特性-阻塞队列和阻塞栈(含代

    Java中常见的阻塞队列实现包括: 1. `ArrayBlockingQueue`: 一个基于固定大小数组的阻塞队列,公平或非公平的锁策略可选。 2. `LinkedBlockingQueue`: 基于链表结构的阻塞队列,容量可以无限大,但内部维护了一个...

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

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

    元素唯一的LinkedBlockingQueue阻塞队列

    在Java并发编程中,`LinkedBlockingQueue`是一种基于链表结构的阻塞队列,它在多线程环境下的性能表现优秀,常用于实现生产者消费者模型。这个队列的一个关键特性是其内部节点的链接方式,即每个元素都是一个节点,...

    快速非阻塞并发队列算法

    在对12节点SGI Challenge多处理器的实验中显示,新的非阻塞队列算法在性能上始终超越已知的最佳替代方案,特别是在提供通用原子原语(如比较并交换或条件加载存储)的机器上,它是首选算法。另一方面,两锁并发队列...

    高效的实现队列

    它可能包含了上述某一种或多种队列的实现,例如用C++、Java或其他编程语言实现的简单队列、阻塞队列、并发队列等。具体的实现细节需要查看源代码才能得知。 在实际应用中,队列常被用于任务调度、消息传递、网络...

    高效延时队列的设计与实现

    2. 使用JDK自带的DelayQueue:这是一个无界阻塞队列,元素需实现Delayed接口,当延迟时间到达时,元素可以从队列中取出。但这种方式不适用于分布式环境。 3. 消息中间件实现,如RabbitMQ:通过设置消息的存活时间...

    基于Linux实现简单的队列

    - **非阻塞队列**:不等待队列状态改变,若操作无法立即执行,则返回错误或特殊值,让调用者自行决定如何处理。 3. **线程安全**:在多线程环境下,线程安全意味着代码在并发执行时仍能保持正确性,不会出现数据不...

    使用队列实现排队系统

    - **阻塞队列**:在多线程环境中,当队列为空时,出队操作会阻塞,直到有新的元素入队;反之,当队列满时,入队操作也会阻塞。 ### 6. 编程实现 在Python中,可以使用内置的`collections.deque`实现队列,或者使用...

    Java wait和notifyAll实现简单的阻塞队列

    Java wait和notifyAll实现简单的阻塞队列 在 Java 中,wait 和 notifyAll 是两个非常重要的方法,它们都是在 Object 类中声明的,用于实现线程之间的通信和同步。wait 方法会使调用线程进入等待状态,并释放所持有...

    数据结构——队列的实现

    5. 阻塞队列:在多线程环境中,当队列为空时,出队操作会阻塞直到有元素入队;反之,当队列满时,入队操作也会阻塞。 队列的实现: 1. 数组实现:最基础的实现方式,通过数组索引来表示队头和队尾。但需要注意数组...

    利用消息队列实现进程间通信

    需要指定消息队列标识符、消息结构体指针、消息的长度以及控制标志,如是否阻塞等。 在描述中提到的`msgsend`函数,可能是一个自定义的函数,用来封装`msgsnd()`函数的调用。当用户输入'end'时,程序会结束,这可能...

    Java 阻塞队列详解及简单使用

    Java提供了几种阻塞队列的实现,每种实现都有其特定的特性: - **ArrayBlockingQueue**:基于数组的有界阻塞队列,容量固定,性能高效,适合对容量有严格控制的场景。 - **LinkedBlockingQueue**:基于链表结构的...

    C#使用队列(Queue)解决简单的并发问题

    这个简单的例子展示了如何利用队列实现生产者-消费者模型。生产者(在此案例中是用户提交文章发布请求)将任务添加到队列,而消费者(后台线程)则负责从队列中取出并处理这些任务。由于队列的线程安全特性,多个...

    Java并发编程之阻塞队列详解

    这样,阻塞队列就自然而然地实现了线程间的同步和通信。 Java的`java.util.concurrent`包提供了多种阻塞队列实现: 1. **ArrayBlockingQueue**:这是一个基于固定大小数组实现的阻塞队列。在创建时必须指定容量,...

Global site tag (gtag.js) - Google Analytics