A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多线程问题:吃货问题,保证线程安全的前提下,加锁保证使用同一共享数据
包子铺线程生产包子,吃货线程消费包子。当包子没有时(包子状态为false),吃货线程等待,包子铺线程生产包子
(即包子状态为true),并通知吃货线程(解除吃货的等待状态),因为已经有包子了,那么包子铺线程进入等待状态。
接下来,吃货线程能否进一步执行则取决于锁的获取情况。如果吃货获取到锁,那么就执行吃包子动作,包子吃完(包
子状态为false),并通知包子铺线程(解除包子铺的等待状态),吃货线程进入等待。包子铺线程能否进一步执行则取
决于锁的获取情况
包子资源类:
        public class BaoZi {
                  String pier ;
                String xianer ;
                boolean flag = false ;//包子资源 是否存在 包子资源状态
}
吃货线程类:
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){
        if(bz.flag ==  == false){//没包子
try {
        bz.wait();
        } catch (InterruptedException e) {
        e.printStackTrace();
}
}
System.out.println("吃货正在吃"+bz.pier+bz.xianer+"包子");
        bz.flag = false;
        bz.notify();
                        }
                }
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马