《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
五、代码实现
/**
- 商店类(Shop):定义一个成员变量,表示第几个面包,提供生产面包和消费面包的操作;
*/
class Shop {
private int bread = 0;
/**
- 生产面包
*/
public synchronized void produceBread() {
if (bread < 10) {
bread++;
System.out.println(Thread.currentThread().getName() + “:开始生产第” + bread + “个面包”);
notify(); // 唤醒消费者线程
} else {
try {
wait(); // 告诉生产者等待一下
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
- 消费面包
*/
public synchronized void consumeBread() {
if (bread > 0) {
System.out.println(Thread.currentThread().getName() + “:开始消费第” + bread + “个面包”);
bread–;
notify(); // 唤醒生产者线程
} else {
try {
wait(); // 告诉消费者等待一下
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
- 生产者类(Producer):继承Thread类,重写run()方法,调用生产面包的操作
*/
class Producer extends Thread {
private Shop shop;
public Producer(Shop shop) {
this.shop = shop;
}
@Override
public void run() {
System.out.println(getName() + “:开始生产面包…”);
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
shop.produceBread();
}
}
}
/**
- 消费者类(Consumer):继承Thread类,重写run()方法,调用消费面包的操作
*/
class Consumer extends Thread {
private Shop shop;
public Consumer(Shop shop) {
this.shop = shop;
}
@Override
public void run() {
System.out.println(getName() + “:开始消费面包…”);
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
shop.consumeBread();
}
}
}
public class BreadTest {
public static void main(String[] args) {
// 创建商店对象
Shop shop = new Shop();
// 创建生产者对象,把商店对象作为构造方法参数传入生产者对象中
Producer p1 = new Producer(shop);
p1.setName(“生产者”);
// 创建消费者对象,把商店对象作为构造方法参数传入消费者对象中
Consumer c1 = new Consumer(shop);
c1.setName(“消费者”);
p1.start();
c1.start();
}
}
代码执行结果如下:
消费者:开始消费面包…
生产者:开始生产面包…
生产者:开始生产第1个面包
生产者:开始生产第2个面包
生产者:开始生产第3个面包
生产者:开始生产第4个面包
消费者:开始消费第4个面包
生产者:开始生产第4个面包
生产者:开始生产第5个面包
生产者:开始生产第6个面包
生产者:开始生产第7个面包
生产者:开始生产第8个面包
消费者:开始消费第8个面包
生产者:开始生产第8个面包
生产者:开始生产第9个面包
生产者:开始生产第10个面包
消费者:开始消费第10个面包
生产者:开始生产第10个面包
技术学习总结
学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
3297881)]
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
[外链图片转存中…(img-AeOPkMeD-1714453297882)]
[外链图片转存中…(img-tv7tCp0U-1714453297882)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!