首页 > 代码库 > java多线程实现简单队列
java多线程实现简单队列
1.创建Queue.java
public class Queue { private LinkedList<Object> list = new LinkedList<Object>() ; private final int minSize = 0 ; ; private final int maxSize ; private AtomicInteger count = new AtomicInteger(0) ; public Queue(int size){ this.maxSize = size ; } private final Object lock = new Object() ; public void put(Object o){ synchronized(lock){ while(size() == this.maxSize){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } list.add(o) ; //计数器增加 count.incrementAndGet() ; //通知唤醒 lock.notify(); } } private int size(){ return count.get() ; } public Object take(){ Object res = null ; synchronized(lock){ while(size() == this.minSize){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } res = list.removeFirst(); //计数器减1 count.decrementAndGet() ; lock.notify(); } return res ; } public static void main(String[] args) { final Queue mq = new Queue(3) ; mq.put("a"); mq.put("b"); mq.put("c"); new Thread(new Runnable() { @Override public void run() { mq.put("g"); System.out.println("put1 secceseful"); mq.put("f"); System.out.println("put2 secceseful"); } }).start(); new Thread(new Runnable() { @Override public void run() { System.out.println("take value = "http://www.mamicode.com/+mq.take() );>
运行结果如下:
take value = http://www.mamicode.com/a>
执行第一个put的时候由于队列容量已经满了,所以线程阻塞。另一个线程take之后,阻塞的线程继续执行put成功。
java多线程实现简单队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。