自定义一个简单的阻塞队列
来源:互联网 发布:jpg用什么软件 编辑:程序博客网 时间:2024/06/10 11:46
通过LinkedList实现一个简单的阻塞队列,实现put和get方法
public class MyBlockingQueue<T> { private LinkedList<T> linkedList = new LinkedList<>(); private AtomicInteger count = new AtomicInteger(0); private int minSize = 0; private int maxSize; private Object lock = new Object(); public MyBlockingQueue(int maxSize){ this.maxSize = maxSize; } public void put(T t){ synchronized (lock){ while(count.get() == maxSize){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } linkedList.add(t); count.incrementAndGet(); System.out.println(" 元素 " + t + " 被添加 "); lock.notify(); } } public T take(){ T temp; synchronized (lock){ while (count.get() == minSize){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } temp = linkedList.removeFirst(); count.decrementAndGet(); System.out.println(" 元素 " + temp + " 被消费 "); lock.notify(); } return temp; } public int getSize(){ return count.get(); } public static void main(String[] args) { MyBlockingQueue<String> queue = new MyBlockingQueue<String>(5); queue.put("a"); queue.put("b"); queue.put("c"); queue.put("d"); queue.put("e"); new Thread(new Runnable() { @Override public void run() { queue.put("+1"); queue.put("+2"); } }).start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } queue.take(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } queue.take(); } }).start(); }}
阅读全文
0 0
- 自定义一个简单的阻塞队列
- 一个简单的阻塞队列实现
- c++ 多线程阻塞队列的简单实现
- Java:实现简单的阻塞队列
- 使用数组简单实现的阻塞队列
- 一个简单的队列
- java 阻塞队列自定义实现
- 一个简单的非阻塞通讯DEMO。。。
- 一个简单的队列实现
- 基于C++11的阻塞队列简单实现
- java多线程之阻塞队列BlockingQueue的简单应用
- 一个阻塞队列引发的死锁和伪唤醒
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- 一个由阻塞队列引发的类死锁案例
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- Java的阻塞队列
- Condition的阻塞队列
- 锁
- Jersey Restful搭建 及问题
- 短信是否下发,网关下发但却没有返回状态码的时候
- Fuzzing初学者指南:利用Address Sanitizer找到更多BUG
- JAVA Annotation
- 自定义一个简单的阻塞队列
- mybaits模糊查询
- Linux之top命令
- float 与position 的一个demo
- 10个运维人员需要知道的”系统进程”
- 推荐:js用canvas画水平曲线走势图,图线自适应垂直高度
- 【HDU
- java实现ICMP协议的ping功能
- java 日志的使用实际练习代码