其他分享
首页 > 其他分享> > 等待唤醒机制代码实现_包子类&包子铺、线程池的概念和原理

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

作者:互联网

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

  注意点:

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

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

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

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

      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