java 之 阻塞队列实现

原创 2012年03月22日 00:00:08
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 阻塞队列
 * @author ETHAN
 *
 */
public class BoundedBuffer {
	final Lock lock = new ReentrantLock();
	final Condition notFull = lock.newCondition();
	final Condition notEmpty = lock.newCondition();
	
	final Object[] items = new Object[100];
	int putptr, takeptr,count;
	
	public void put(Object x) throws InterruptedException {
		lock.lock();
		try {
			//如果已经放满了
			while(count==items.length) {
				//发现满了就等
				notFull.await();
			}
			items[putptr] = x;
			
			if(++putptr==items.length) putptr=0;
			
			++count;
			//只唤醒 取的线程(有放的和取的线程)
			notEmpty.signal();
		} finally {
			lock.unlock();
		}
	}
	
	public Object take() throws InterruptedException {
		lock.lock();
		try {
			//如果已经放满了
			while(count==0) {
				//获得通知后,干下边的活
				//发现空了,就着了
				notEmpty.await();
			}
			
			Object x = items[takeptr];
			
			if(++takeptr==items.length) takeptr=0;
			
			--count;
			notFull.signal();
			return x;
		} finally {
			lock.unlock();
		}
	}
}

Java并发编程-阻塞队列(BlockingQueue)的实现原理

阻塞队列 (BlockingQueue)是Java util.concurrent包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年06月13日 19:37
  • 28304

【java并发】阻塞队列的使用

在前面一篇名为条件阻塞Condition的应用的博客中提到了一个拔高的例子:利用Condition来实现阻塞队列。其实在java中,有个叫ArrayBlockingQueue的类提供了阻塞队列的功能,...
  • eson_15
  • eson_15
  • 2016年06月07日 09:27
  • 4340

用redis阻塞队列,实现消息传递

在网络服务器运行的时候,可能会碰到这样的需求,主程序处理会很耗时,            1,网络流量很大,但有紧急情况需要发送邮件通知别人,这时如果在程序中发送邮件,将会很费时,但又必须做     ...
  • Hello_ok_google
  • Hello_ok_google
  • 2013年11月26日 21:05
  • 11240

java线程聊天室(阻塞队列实现)

  • 2015年03月26日 14:21
  • 1.09MB
  • 下载

消息分发框架(基于JAVA阻塞队列实现、 生产者消费者模型)

  • 2017年05月16日 15:39
  • 25.84MB
  • 下载

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

  • 2017年06月10日 12:31
  • 2KB
  • 下载

java 阻塞队列自定义实现

自定义阻塞队列:思路==》阻塞队列有这样一个特点,当队列中没有值得时候,这是只允许值得插入,当队列中有值得时候,这时候允许队列的插入,同时也允许队列中元素的移除,但是当队列中没有值得时候,这时候就不允...
  • fjkxyl
  • fjkxyl
  • 2017年03月21日 23:01
  • 289

使用java来实现阻塞队列

* BlockingQueue: 顾名思义,首先它是一个队列,并且支持阻塞机制,阻塞的放入和阻塞的得到数据...
  • z_565282532
  • z_565282532
  • 2017年08月27日 21:02
  • 105

消费者生产者模式(2)——用java阻塞队列实现

生产者——消费者模式有三个阶段的编程:     1.使用synchronized,wait,notify(这在我博客中已经有实现了,可以找找看看)      2.使用阻塞队列LinkedBlock...
  • u013276277
  • u013276277
  • 2017年11月13日 11:26
  • 52

阻塞队列自定义实现 in Java

原文地址  By Jakob Jenkov   翻译:寒桐 校对:方腾飞 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的...
  • likaiwalkman
  • likaiwalkman
  • 2015年08月04日 23:35
  • 417
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 之 阻塞队列实现
举报原因:
原因补充:

(最多只允许输入30个字)