zoukankan      html  css  js  c++  java
  • java线程几个重要概念(wait sleep notify 生产者与消费者)

    Sleep 和 wait

    sleep不会释放锁,而wait会释放锁; 使用区域不用,sleep是哪都能用,wait只能在同步方法或者同步代码块中。

    sleep是Thread调用的, 而wait和notify方法必须是“锁对象”调用的!

    生产者 和 消费者

    //实体类
    public class Baozi {
        String pi;
        String xian;
        boolean flag = false;
    }
    
    
    //主测试类
    public class BaoziMain {
        public static void main(String[] args) {
            Baozi bz = new Baozi();
            BaoziPu bzp = new BaoziPu(bz);
            bzp.start();
    
            ChiHuo ch = new ChiHuo(bz);
            ch.start();
        }
    }

    生产者

    public class BaoziPu extends Thread {
    
        private Baozi bz;
        public BaoziPu(Baozi bz){
            this.bz = bz;
        }
    
        @Override
        public void run() {
    
           while (true){
    
               synchronized (bz){
    
                   if(bz.flag == true){
                       //包子铺进入等待的状态 等待客人吃完包子
                       try {
                           bz.wait(); //注意必须是锁对象来调用wait方法!!!!!!
                       } catch (InterruptedException e) {
                           e.printStackTrace();
                       }
                   }
    
    
    
                   //被唤醒后执行
                   System.out.println("正在生产包子.....");
                   try {
                       Thread.sleep(1000);
                   } catch (InterruptedException e) {
                       e.printStackTrace();
                   }
                   bz.flag = true;
                   System.out.println("赶紧来吃包子吧");
                   bz.notify();
    
               }
    
    
           }
        }
    }

    消费者

    public class ChiHuo extends Thread {
        private Baozi bz;
        public ChiHuo(Baozi bz) {
            this.bz = bz;
        }
    
    
        @Override
        public void run() {
    
            while (true){
    
                synchronized (bz){
    
                    if(bz.flag == false){
                        try {
                            bz.wait(); //注意必须是锁对象来调用wait方法!!!!!!
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
    
    
                    //被唤醒后执行
                    System.out.println("吃货正在吃包子.....");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                    bz.flag = false;
                    System.out.println("赶紧做包子吧");
                    bz.notify();
    
                }
    
    
            }
        }
    }
    坚持
  • 相关阅读:
    mongodb分布式查询
    MongoDB JAVA API Filters
    mongodb.conf配置文件详解
    mongodb安装配置
    Elasticsearch-2.3.x填坑之路
    C++对象模型详解
    关于虚函数的那些事儿
    关于B树的一些总结
    动态规划问题
    C中的qsort函数和C++中的sort函数的理解与使用
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12836878.html
Copyright © 2011-2022 走看看