zoukankan      html  css  js  c++  java
  • wait,notify,非阻塞队列实现生产者,消费者模型

    import java.util.PriorityQueue;
    
    /**
     * @author wangpei
     * @version 创建时间:2017年4月20日 下午5:01:44 生产者消费者模型的wait,notify实现
     */
    public class ShengChanZhe {
        private int size = 10;// 初始化非阻塞队列的长度为10
        PriorityQueue<Object> p = new PriorityQueue(size);// 构建非阻塞队列
    
        public static void main(String[] args) {
            ShengChanZhe ac = new ShengChanZhe();
            product p = ac.new product();
            consume c = ac.new consume();
            Thread thread1 = new Thread(p);
            Thread thread2 = new Thread(c);
            thread1.start();
            thread2.start();
    
        }
    
        class product implements Runnable {// 生产者
            public product() {
    
            }
    
            @Override
            public void run() {
                synchronized (p) {
                    while (true) {
                        if (p.size() == size) {// 队列为满
                            try {
                                p.wait();// 队列阻塞
                            } catch (InterruptedException e) {
                                p.notify();
                                e.printStackTrace();
    
                            }
    
                        }
                        p.offer(1);// 生产一个值
                        System.out.println("我生产出了一个元素");
                        p.notify();
                    }
    
                }
    
            }
    
        }
    
        class consume implements Runnable {
    
            @Override
            public void run() {
                synchronized (p) {
                    while (true) {
                        if (p.size() == 0) {// 队列为空
                            try {
                                p.wait();
                            } catch (InterruptedException e) {
                                p.notify();
                                e.printStackTrace();
                            }
    
                        }
                        p.poll();
                        System.out.println("我消费了一个元素");
                        p.notify();
                    }
    
                }
    
            }
        }
    
    }
    
  • 相关阅读:
    2804 最大最小数质因数
    5429 多重背包
    1851 越狱
    Gvim使用
    3622 假期
    4906 删数问题
    2845 排序的代价
    poj 3352
    常用正则表达式汇总
    功能简单例子
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551210.html
Copyright © 2011-2022 走看看