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();
}
}