示例:分别创建并启动五个线性用于生产鸡蛋,消费鸡蛋;且鸡蛋最多可以有10个,消费鸡蛋只能是生产好了的鸡蛋,完成一边生产鸡蛋,一边消费鸡蛋的模型。
创建一个鸡蛋资源类EggRes,该类中封装有鸡蛋个数count,行为有生产鸡蛋,消费鸡蛋两个方法,
用同步锁来解决同步问题,等待唤醒机制完成线程间通讯,正常完成多生产多消费功能实现;
鸡蛋资源类EggRes代码如下:
class EggRes {
//最多能同时存在鸡蛋10个
int count;
boolean flag = true;
public void product() {
//鸡蛋小于10个时,生产鸡蛋线程为唤醒状态;鸡蛋为10个以上时,等待状态;
while (true) {
//执行while循环目的是使该线程可以生产很多鸡蛋,而不是生产一个鸡蛋就执行结束了
if (count >= 10) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程" + Thread.currentThread().getName() + ",生产了鸡蛋:" + ++count );
//每次生产一次鸡蛋,该线程就释放出锁,给予其他生产线