等待唤醒机制代码实现_包子类&包子铺、线程池的概念和原理
等待唤醒机制代码实现_包子类&包子铺
注意点:
包子铺线程和包子线程关系-->通信(互诉)
必须同时同步技术保证俩个线程只能由一个进行
锁对象必须保证唯一,可以使用保证对象作为锁对象
包子对象和吃货的类就需要吧包子对象作为参数传递进来
1,需要在成员创建一个包子变量
2,使用带参数构造方法,为这个包子变量赋值
案例:
先创建包子类
public class Baozi {
String pi;
String xian;
boolean flag =false;
}
创建包子铺类
public class Baozipu extends Thread {
// 创建一个包子变量
private Baozi bz;
public Baozipu(Baozi bz) {
this.bz = bz;
}
@Override
public void run() {
int count = 0;
synchronized (bz){
if (bz.flag=true) {
try {
bz.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (count%2==0){
bz.pi ="皮薄";
bz.xian="三鲜";
}else {
bz.pi= "饼皮";
bz.xian= "猪肉";
}
count++;
System.out.println("包子铺正在生产");
}
}
}
然后在创建吃货
public class Chihuo extends Thread {
private Baozi bz;
public Chihuo(Baozi bz) {
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.pi+bz.xian+"的包子");
bz.flag=false;
bz.notify();
System.out.println("吃货已经吧"+bz.pi+bz.xian+"的包子吃完了,包子开始生产包子");
}
}
}
}
测试类:
public class Test {
public static void main(String[] args) {
Baozi baozi = new Baozi();
new Baozipu(baozi).start();
new Chihuo(baozi).start();
}
}
线程池的概念和原理
我们使用线程的时候去创建一个线程,这非常简单,但是会由一个问题
如果并发的线程有很多,并且执行的时间很短任务就结束了,这样频繁的创建线程会大大的降低系统的效率那么我们可以使用一种叫线程池来达到这样的效果
线程池的概念:
线程池:其实就是个一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程的操作,无需反复创建消耗资源
图解:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY