![]()
package com.programme.Demo02;
/**
* @program: springboottest
* @description: ${description}
* @author: Mr.zw
* @create: 2021-05-21 19:42
**/
public class BaoZi {
//让这个BaoZi类的对象,当作锁对象
//创建变量,用来代表是否有包子
//false 没包子 true 有包子
boolean isHaveBaoZi = false;
}
package com.programme.Demo02;
/**
* @program: springboottest
* @description: ${description}
* @author: Mr.zw
* @create: 2021-05-21 19:42
**/
//消费者(吃货)
public class Consumer extends Thread{
private BaoZi baoZi;
public Consumer(BaoZi baoZi) {
this.baoZi = baoZi;
}
@Override
public void run() {
while (true){
synchronized (baoZi){
if (!baoZi.isHaveBaoZi){
try {
baoZi.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//如果代码执行到这里,说明一定有包子
try {
System.out.println("吃货正在吃包子");
Thread.sleep(1000);
System.out.println("包子吃完了,包子铺快点做");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//修改变量,没有包子
baoZi.isHaveBaoZi = false;
//唤醒包子铺
baoZi.notify();
}
}
}
}
package com.programme.Demo02;
/**
* @program: springboottest
* @description: ${description}
* @author: Mr.zw
* @create: 2021-05-21 19:40
**/
//生产者(包子铺)
public class Producer extends Thread {
private BaoZi baoZi;
public Producer(BaoZi baoZi) {
this.baoZi = baoZi;
}
@Override
public void run() {
while (true){
synchronized (baoZi){
//判断:如果有包子,就等待
if (baoZi.isHaveBaoZi){
try {
baoZi.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//如果代码执行到这里,说明一定没有包子
try {
System.out.println("包子铺正在做包子");
Thread.sleep(1000);
System.out.println("包子做好了,吃货快来吃");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//修改变量,为有包子
baoZi.isHaveBaoZi = true;
//唤醒吃货线程
baoZi.notify();
}
}
}
}
package com.programme.Demo02;
/**
* @program: springboottest
* @description: ${description}
* @author: Mr.zw
* @create: 2021-05-21 19:45
**/
public class Test {
public static void main(String[] args) {
//baoZi对象里面有变量代表是否有包子
//还可以作为两条线程的锁对象
BaoZi baoZi = new BaoZi();
Producer p = new Producer(baoZi);
Consumer c = new Consumer(baoZi);
p.start();
c.start();
}
}