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 =
操作系统多线程例子--吃水果问题
最新推荐文章于 2021-04-09 19:38:31 发布
本文通过吃水果问题深入浅出地探讨了操作系统中的多线程概念。详细解释了如何在多线程环境下,确保资源的正确分配和同步,避免竞态条件。通过对线程的创建、同步和互斥锁的使用,展示了如何解决并发编程中可能遇到的问题。
摘要由CSDN通过智能技术生成