一。线程通信: 共享资源
wait() notify()
notify() - 每次只能唤醒一个线程, 只能唤醒等待时间久的那个线程
notifyAll() - 唤醒所有正在等待的线程
wait() -> 只能被notify() 或者 notifyAll() 唤醒
wait(long) -> 到时间以后, 自动醒来
1.包子铺和吃货的线程通信
public class Baozi {
String pier;
String xiang;
boolean flage=false;//初始化包子资源状态
}
---------------------------------------------
public class Baozipu extends Thread {
private Baozi bz;
public Baozipu(String name, Baozi bz) {
super(name);
this.bz = bz;
}
@Override
public void run() {
int count = 0;
//造包子
while (true) {
synchronized (bz) {
//有包子,先等待不造
if (bz.flage) {
try {
bz.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//没包子,造包子
if (!bz.flage) {
System.out.println(Thread.currentThread().getName() + "包子铺开始生产包子");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (count % 2 == 0) {
bz.pier = "冰皮";
bz.xiang = "无仁";
} else {
bz.pier = "薄皮";
bz.xiang = "牛肉大葱";
}
count++;
//造出包子改flage
System.out.println("包子造好了:" + bz.pier + bz.xiang);
System.out.println("吃货来吃吧");
bz.flage = true;
//唤醒吃货线程
bz.notify();//唤醒等待时间最长的那个线程
}
}
}
}
}
--------------------------------------------------
public class Chihuo extends Thread {
private Baozi bz;
public Chihuo(String name, Baozi bz) {
super(name);
this.bz = bz;
}
@Override
public void run() {
while (true) {
synchronized (bz) {
//没包子,等