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();
                    }
    
                }
    
            }
        }
    
    }
    
  • 相关阅读:
    go语言切片
    sharding-jdbc分库分表配置,多数据源
    spring boot的配置文件
    go-micro生成项目
    自定义注解+aop实现jetcache功能扩展
    linux下mysql忘记密码解决方案
    MySQL 1130错误,无法远程连接
    Linux/UNIX 上安装 MySQL
    BarTender遇到的问题
    SourceTree安装使用
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551210.html
Copyright © 2011-2022 走看看