生产消费拿馒头

来源:互联网 发布:java中方法的调用顺序 编辑:程序博客网 时间:2024/04/28 10:58

package com.phone.week5.day3;

public class MasterStudentDemo {

public static void main(String[] args) {    final LanZi lz = new LanZi();// 创建一个篮子对象,它也是相当于锁    new Thread(new Runnable() {        @Override        public void run() {            new Master(lz).fang();// 创建一个师傅对象        }    }, "师父A").start();    new Thread(new Runnable() {        @Override        public void run() {            new Master(lz).fang();// 创建一个师傅对象        }    }, "师父B").start();    new Thread(new Runnable() {        @Override        public void run() {            new Student(lz).na();// 创建第一个学生对象        }    }, "学生A").start();    new Thread(new Runnable() {        @Override        public void run() {            new Student(lz).na();// 创建第一个学生对象        }    }, "学生B").start();    new Thread(new Runnable() {        @Override        public void run() {            new Student(lz).na();// 创建第一个学生对象        }    }, "学生C").start();}// 师傅类static class Master {    LanZi lz;    public Master(LanZi lz) {        super();        this.lz = lz;    }    public void fang() {        for (int i = 1; i <= 3; i++) {            try {                Thread.sleep(3000);            } catch (InterruptedException e) {                e.printStackTrace();            }            lz.zengJia();// 增加        }    }}// 学生类static class Student {    LanZi lz;    public Student(LanZi lz) {        super();        this.lz = lz;    }    public void na() {        for (int i = 1; i <= 3; i++) {            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            lz.jianShao();        }    }}

}

// 篮子
class LanZi {
// private boolean flag=false;
private int number = 6;

// 馒头增加的方法public synchronized void zengJia() {    while (number >= 6) {        try {            this.wait();        } catch (InterruptedException e) {            e.printStackTrace();        }    }    // while(number<6){    number++;    System.out.println(Thread.currentThread().getName() + "放了一个馒头,篮子里已经有:"            + number + "个馒头了");    this.notifyAll();    // }}// 馒头减少的方法public synchronized void jianShao() {    while (number <= 0) {        try {            this.wait();        } catch (InterruptedException e) {            e.printStackTrace();        }    }    try {        Thread.sleep(10);    } catch (InterruptedException e) {        e.printStackTrace();    }    number--;    System.out.println(Thread.currentThread().getName() + "学生拿了一个,篮子里还剩:"            + number + "个");    this.notifyAll();}

}

0 0
原创粉丝点击