package com.aliyun.blockqueue;
import java.util.LinkedList;
import java.util.List;
/**
* 阻塞队列实现
* Created with IntelliJ IDEA.
* User: jack
* Date: 14-6-16
* Time: 下午3:38
* To change this template use File | Settings | File Templates.
*/
public class SimpleBlockingQueue {
private List blockQueue=new LinkedList(); //存放实例的队列
private int limit=10; //队列的上限
public SimpleBlockingQueue(int limit){
this.limit=limit;
}
/**
* 向队列中添加数据
* @param object
*/
public synchronized void put(Object object){
//判断队列是否已满
while(this.limit==blockQueue.size()){
try {
wait();
System.out.println("进入阻塞"+object);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
//判断队列是否还没有数据,如果没有唤醒所有线程
if(blockQueue.size()==0){
notifyAll();
System.out.println("没有数据,唤醒所有线程");
}
//向队列中添加元素
this.blockQueue.add(object);
for(Object obj:this.blockQueue){
System.out.println("元素"+obj+"已添加到队列中");
}
}
/**
* 获取队列中的数据
*/
public synchronized Object take(){
//判断队列是否有数据
while(this.blockQueue.size()==0){
try {
wait();
System.out.println("获取数据时进入阻塞状态");
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
//判断队列是否已满
if(this.limit==this.blockQueue.size()){
notifyAll();
System.out.println("获取数据时队列已满");
}
System.out.println(this.blockQueue.remove(0));
return this.blockQueue.remove(0);
}
}
package com.aliyun.blockqueue;
import org.junit.Test;
/**
* 测试阻塞队列的实现
* Created with IntelliJ IDEA.
* User: jack
* Date: 14-6-16
* Time: 下午3:59
* To change this template use File | Settings | File Templates.
*/
public class TestSimpleBlockingQueue {
@Test
public void testPut(){
SimpleBlockingQueue simpleBlockingQueue=new SimpleBlockingQueue(5);
for(int i=0;i<10;i++){
simpleBlockingQueue.put("测试数据");
if(i==7){
simpleBlockingQueue.take();
}
}
}
}
相关推荐
java阻塞队列实现原理及实例解析.docx
阻塞队列实现生产者消费者模式Java开发Java经验技巧共4页.pdf.zip
消息分发框架,基于java阻塞队列实现,生产者消费者模型 可用于任务分发,服务器消息消息,以及网络IO 性能优化,多线程
实现java模拟阻塞队列的例子,该代码包括,阻塞队列实现生产者,消费者。和模拟阻塞队列实现生产者及消费者模式,帮助你更好的理解java多线程
主要介绍了java阻塞队列实现原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
运行,登录时,请用两个浏览器登录,应为有不同session,这是跟据session来判断用户的
干扰队列基于干扰器 RingBuffer 的阻塞队列实现
Java实现简单的阻塞队列2种方式,1使用wait(),notify();2使用countdownlatch实现
在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。 使用非阻塞队列的时候有一个很大问题是:它不会对当前线程产生阻塞,那么在面对类似...
主要介绍了剖析Java中阻塞队列的实现原理及应用场景,这里也对阻塞和非阻塞队列的不同之处进行了对比,需要的朋友可以参考下
c++11 实现的阻塞队列
大学操作系统课程 综合实验 单处理器系统的时间片轮转进程调度 算法,使用python实现。带注释。
主要介绍了C++数据结构与算法之双缓存队列实现方法,结合实例形式分析了双缓存队列的原理、实现方法与相关注意事项,需要的朋友可以参考下
阻塞队列是多线程中常用的数据结构,对于实现多线程之间的数据交换、同步等有很大作用。 阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。简而言之,阻塞队列...
主要介绍了详解Java阻塞队列(BlockingQueue)的实现原理,阻塞队列是Java util.concurrent包下重要的数据结构,有兴趣的可以了解一下
首先 LinkedBlockingQueue 是一个 “可选且有界” 的阻塞队列实现,你可以根据需要指定队列的大小。 接下来,我将创建一个 LinkedBlockingQueue ,它最多可以包含100个元素: BlockingQueue<Integer> ...
Nodejs阻塞队列 Nodejs 进程内阻塞 FIFO 队列实现。 具有最大并发的队列。 npm install block-queue 例子 var queue = require ( 'block-queue' ) ; var q = queue ( 1 , function ( task , done ) { // ...
利用单例模式与阻塞队列实现异步的日志系统,记录服务器运行状态; 利用RAII机制实现了数据库连接池,减少数据库连接建立与关闭的开销,同时实现了用户注册登录功能。 增加logsys,threadpool测试单元(todo: timer,...
设备驱动中阻塞与非阻塞及实现:在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础数据结构,与进程调度机制紧密...
实现了一个多线程安全的循环队列,并能以阻塞方式出队,提供效率,