A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Test1 {
        public static void main(String[] args) {
                Student s = new Student();

                Get G = new Get(s);
                Set S = new Set(s);

                Thread t1 = new Thread(G);
                Thread t2 = new Thread(S);
                t2.start();
                t1.start();
        }

}
public class Student {
        private String name;
        private int age;
        private boolean flag;
       
        public synchronized void set (String name ,int age){
                if (flag){
                        try {
                                this.wait();
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                }
                this.name=name;
                this.age=age;
               
                this.flag=true;
                this.notify();
        }
        public synchronized void get(){
                if (!flag){
                        try {
                                this.wait();
                        } catch (InterruptedException e) {

                                e.printStackTrace();
                        }
                }
                System.out.println(this.name+this.age+"个");
                this.flag=false;
                this.notify();
        }
}
public class Set implements Runnable {
        Student s;

        public Set(Student s) {
                this.s = s;
        }

        @Override
        public void run() {
                int i = 0;
                while (true) {
                                if (i%2==0){
                                        s.set("生产包子中,没有了:",0);
                        }else{
                                s.set("卖包子咯  还有:", 10);
                        }
                                i++;
                }
        }

}

public class Get implements Runnable {
        private Student s;
        public Get(Student s) {
                this.s = s;
        }

        @Override
        public void run() {

                while (true) {
                       
                        s.get();
                }
        }
}

2 个回复

倒序浏览
这个是 距举例说明的    比较难理解的就是 这个上锁  以及 这个   等待唤醒机制 为了追求两个线程相互唤醒 相互等等待   
回复 使用道具 举报
如果   有什么 不懂的 可以留言给我 我会帮你解答    我感觉 也就是这四个布尔  比较难理解 别绕进去  如果绕进去  你就半小时出不来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马