import java.util.concurrent.locks.*;
class Resource // 封装水果资源,提供放水果和吃水果方法。
{
private String name;
private static int ap = 0; // 苹果信号,0表示无,1表示有
private static int or = 0; // 橘子信号,0表示无,1表示有
private static int pz = 0; // 盘子有无水果信号,0表示无,1表示有
Lock lock = new ReentrantLock(); // 锁对象
Condition fmther_lock = lock.newCondition();// 爸妈共用监视器,可以唤醒爸妈其中一个放水果
Condition son_lock = lock.newCondition(); // 儿子监视器
Condition daughter_lock = lock.newCondition(); // 女儿监视器
// 放水果,i=1表示是爸爸,i=2表示是妈妈
void put(String name, int i) {
lock.lock();
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
try {
while (pz == 1) // 盘子有水果
{
try {
fmther_lock.await();
} catch (Exception e) {
e.printStackTrace();
}
}
if (i == 1) // 爸爸
{
ap = 1;
pz = 1;
this.name =
操作系统多线程例子--吃水果问题
最新推荐文章于 2023-10-08 13:26:38 发布