java 环形阻塞队列简单实现
2017-11-09 14:32
459 查看
java 阻塞队列简单实现
/** * 简单的阻塞队列 * @author Administrator * */ public class MySelfBlockingQueue { int capacity = 10; int[] container; int headIndex = 0;//队列头部位置 int tailIndex = 0;//队列尾部位置 int size = 0; MySelfBlockingQueue(){ container = new int[capacity]; } MySelfBlockingQueue(int capacity){ this.capacity = capacity; container = new int[capacity]; } public synchronized int getSize(){ return size; } public synchronized void putData(int data){ while(getSize() == capacity){ try { System.out.println("阻塞中-----------------"); this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } container[tailIndex] = data; size++; tailIndex = ++tailIndex == capacity ? 0 : tailIndex; System.out.println("添加成功"); this.notifyAll(); } public synchronized int getData(){ while(getSize() == 0){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } int rdata = container[headIndex]; container[headIndex] = 0; size--; if(getSize() == 0){ headIndex = 0; tailIndex = 0; }else{ headIndex = ++headIndex == capacity ? 0 : headIndex; } this.notifyAll(); return rdata; } public void clearQueue(){ if(getSize() > 0){ container = new int[capacity]; headIndex = 0; tailIndex = 0; size = 0; } } public String getContent() { String str = "["; for(int i = 0 ; i < container.length ; i++){ if(i < container.length - 1){ str += container[i] + ","; }else{ str += container[i]; } } str += "]"; return str; } public static void main(String[] args) { final MySelfBlockingQueue queue = new MySelfBlockingQueue(6); final CountDownLatch cdl = new CountDownLatch(2); new Thread(new Runnable() { public void run() { for(int i = 1 ; i < 8 ; i++){ queue.putData(i); System.out.println(queue.getContent()); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } cdl.countDown(); } }).start(); new Thread(new Runnable() { public void run() { try { Thread.sleep(7000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(queue.getData()); System.out.println(queue.getContent()); cdl.countDown(); } }).start(); try { cdl.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("------------------------"); } }
相关文章推荐
- 【JAVA】简单实现一个阻塞任务队列
- java 环形队列简单实现
- Java:实现简单的阻塞队列
- Java简单实现固定长度队列(FIFO)
- java之环形队列的实现
- [原创][Java]一个简单高效的线程安全队列的JAVA实现
- Java简单实现固定长度队列(FIFO)
- 基于C++11的阻塞队列简单实现
- java实现缓冲区(阻塞队列,condition,lock)
- java消费者生产者模式及JDK之阻塞队列LinkedBlockingQueue实现
- Java可阻塞队列的两种实现方式
- java并发-使用内置条件队列实现简单的有界缓存
- 一个简单的阻塞队列实现
- 简单环形队列实现
- 浅谈java阻塞队列实现原理
- Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例
- c++ 多线程阻塞队列的简单实现
- Java阻塞队列的实现
- Java语言实现简单FTP软件------>上传下载队列窗口的实现(七)
- 黑马程序员——Java5中的线程并发库(二)--Semaphore实现信号灯、其他同步函数、可阻塞的队列、同步集合