package com.itheima.threaddemo14;
public class Demo {
public static void main(String[] args) {
Desk desk =new Desk();
Foodie f=new Foodie(desk);
Cooker c=new Cooker(desk);
f.start();
c.start();
}
}
package com.itheima.threaddemo14;
public class Foodie extends Thread{
private Desk desk;
public Foodie(Desk desk) {
this.desk=desk;
}
@Override
public void run() {
while (true){
synchronized (desk.getLcok()){
if(desk.getCount()==0){
break;
} else{
//有
if (desk.isFlag()){
System.out.println("吃货在吃汉堡包");
desk.setFlag(false);
desk.getLcok().notifyAll();
desk.setCount(desk.getCount()-1);
}else {
try {
desk.getLcok().wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}
package com.itheima.threaddemo14;
public class Cooker extends Thread{
private Desk desk;
public Cooker(Desk desk) {
this.desk=desk;
}
@Override
public void run() {
while (true){
synchronized (desk.getLcok()){
if (desk.getCount()==0){
break;
}else {
if (!desk.isFlag()){
//生产
System.out.println("厨师生产汉堡包");
desk.setFlag(true);
desk.getLcok().notifyAll();
}else {
try {
desk.getLcok().wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}
package com.itheima.threaddemo14;
public class Desk {
//是否有汉堡包
//public static boolean flag=false;
private boolean flag;
//汉堡包的总数量
//public static int count=10;
private int count=10;
//锁对象
//public static final Object lcok= new Object();
private final Object lcok= new Object();
public Desk() {
}
public Desk(boolean flag, int count) {
this.flag = flag;
this.count = count;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public Object getLcok() {
return lcok;
}
@Override
public String toString() {
return "Desk{" +
"flag=" + flag +
", count=" + count +
", lcok=" + lcok +
'}';
}
}