ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

等待唤醒机制代码实现_包子类&包子铺、线程池的概念和原理

2022-07-12 10:03:26  阅读:102  来源: 互联网

标签:包子铺 public Baozi 线程 包子 bz


等待唤醒机制代码实现_包子类&包子铺

  注意点:

    包子铺线程和包子线程关系-->通信(互诉)

    必须同时同步技术保证俩个线程只能由一个进行

    锁对象必须保证唯一,可以使用保证对象作为锁对象

    包子对象和吃货的类就需要吧包子对象作为参数传递进来

      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();
}
}


线程池的概念和原理

   我们使用线程的时候去创建一个线程,这非常简单,但是会由一个问题

 如果并发的线程有很多,并且执行的时间很短任务就结束了,这样频繁的创建线程会大大的降低系统的效率那么我们可以使用一种叫线程池来达到这样的效果

线程池的概念:

  线程池:其实就是个一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程的操作,无需反复创建消耗资源

 图解:

  

 

 

 

 

    

标签:包子铺,public,Baozi,线程,包子,bz
来源: https://www.cnblogs.com/ssr1/p/16468946.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有