Java:实现简单的阻塞队列
2017-05-17 21:40
573 查看
JDK中自带ArrayBlockingQueue、ListBlockingQueue等阻塞的队列。我们也可以认为自己实现一个。
public class BlockQueue<T> { // push的锁 private final static Object pushLock = new Object(); // pop的锁 private final static Object popLock = new Object(); // 存储数据 private Stack<T> stack; public BlockQueue() { stack = new Stack<>(); } public synchronized void push(T t) { int MAX_SIZE = 3; if (stack.size() >= MAX_SIZE) { // 超过了最大长度,那么就等待 pushLock(); } stack.push(t); // 解开pop的锁 popUnlock(); } public T pop() { if (stack.size() == 0) { // 不能pop,那么就等待 popLock(); } T t = stack.pop(); // 解开push的锁 pushUnlock(); return t; } // push锁 private void pushLock() { synchronized (pushLock) { try { pushLock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } // 解开push锁 private void pushUnlock() { synchronized (pushLock) { pushLock.notify(); } } // pop锁 private void popLock() { synchronized (popLock) { try { popLock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } // 解开pop锁 private void popUnlock() { synchronized (popLock) { popLock.notify(); } } }
相关文章推荐
- java 环形阻塞队列简单实现
- 【JAVA】简单实现一个阻塞任务队列
- Java5实现阻塞队列
- Java简单实现固定长度队列(FIFO)
- 黑马程序员——Java5中的线程并发库(二)--Semaphore实现信号灯、其他同步函数、可阻塞的队列、同步集合
- Java阻塞队列线程集控制的实现
- java消费者生产者模式及JDK之阻塞队列LinkedBlockingQueue实现
- c++ 多线程阻塞队列的简单实现
- Java可阻塞队列的两种实现方式
- java实现缓冲区(阻塞队列,condition,lock)
- [原创][Java]一个简单高效的线程安全队列的JAVA实现
- Java可阻塞队列的两种实现方式 (传统wait/notify和jdk1.5以后的lock)
- Java阻塞队列SynchronousQueue实现并发
- 聊聊高并发(十四)理解Java中的管程,条件队列,Condition以及实现一个阻塞队列
- Java简单队列的实现
- Java语言实现简单FTP软件------>上传下载队列窗口的实现(七)
- Java阻塞队列的实现
- java中使用阻塞队列实现生产这与消费这之间的关系
- java并发-使用内置条件队列实现简单的有界缓存
- Java阻塞队列线程集控制的实现