生产者和消费者的实例:

商品类:
/**
 * 商品类
 *
 */
public class Goods {
    final int MAX_NUMBER = 30; // 最大数量
    final int MIN_NUMBER = 0; // 最小数量
    private int number;
    public Goods(int number) {
        super();
        this.number = number;
    }
    public synchronized int getNumber() {
        return number;
    }
    // 添加
    public  void addNumber() throws InterruptedException{
        if(number >= MAX_NUMBER){
            wait();
        }
        synchronized(this){ // 同步代码块
            this.number = number + 1;
            System.out.println("生产者生产商品,商品数为:" + number);
        }  
        notifyAll();
    }
    // 减少
    public  void sumNumber() throws InterruptedException{
        if(number <= MIN_NUMBER){
            wait();
        }
        synchronized(this){
            this.number = number - 1;
            System.out.println("消费者消费商品,商品数为:" + number);
        }
        notifyAll();
    }
}

测试类:

package book_14.synch;

public class Test {
    
    public static void main(String[] args) {
        // 创建对象
        Goods good = new Goods(20); // 开始的商品数量设为20
        
        while(true){
            // 生产者
            Runnable r1 = () ->{
                try {
                    while(true){
                        good.addNumber();
                        //Thread.sleep(10);
                    }
                } catch (Exception e) {
                    // TODO: handle exception
                }
            };
            Thread t1 = new Thread(r1);
            t1.start();
            // 消费者
            Runnable r2 = () ->{
                try {
                    while(true){
                        good.sumNumber();
                        //Thread.sleep(10);
                    }
                } catch (Exception e) {
                    // TODO: handle exception
                }
            };
            Thread t2 = new Thread(r2);
            t2.start();
        }
            
    }

}

最新文章

  1. 图解JVM的Class文件格式(详细版)
  2. gcd和ex_gcd
  3. div使用jqueryui 源码 | gridview多个功能的源码
  4. 史上最全Vim快捷键键位图(入门到进阶)
  5. ***Jquery下Ajax与PHP数据交换
  6. Oracle 动态查询,EXECUTE IMMEDIATE select into使用方法
  7. SQL参数化查询的问题
  8. matab plot指令和低通滤波器的响应图
  9. block循环饮用解决
  10. Unity 用ml-agents机器学习造个游戏AI吧(2)(入门DEMO)
  11. DAS、SAN和NAS三种存储方式
  12. Redis操作集合,有序集合
  13. CI框架在模型中切换读写库和读写库
  14. windows 性能监视器常用计数器
  15. rocketmq连接报connect to ip:10909 failed
  16. 学习使用NotePad++
  17. IIS7根据PID查找对应的站点
  18. 核心API的使用(获取两个字符串的最大相同子串)
  19. RabbitMQ---2、介绍
  20. 【JavaScript】BOM

热门文章

  1. Django—templates系统:模版语言
  2. 基于ECharts的饼状数据展示
  3. shell命令总结一
  4. C语言程序设计(基础)- 第0次作业
  5. MyGod--Beta版本前期报告
  6. SQLAlchemy 教程 —— 基础入门篇
  7. 学号:201621123032 《Java程序设计》第1周学习总结
  8. selenium webdriver API
  9. MSSQL 2000 错误823恢复
  10. 超绚丽CSS3多色彩发光立方体旋转动画