ICode9

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

等待唤醒机制概述以及需求分析

2022-07-10 09:37:04  阅读:152  来源: 互联网

标签:包子铺 -- 等待 吃货 概述 线程 唤醒 包子 wait


等待唤醒机制概述

就是在一个线程进行了规定操作后,就进入等待状态 ( wait() ),等待其他线程执行完他们的指定代码过后再将其唤醒( notify()) ;

  在有多个线程进行等待时,如果需要,可以使用notifyAll)来唤醒所有的等待线程。

wait/notify 就是线程间的一种协作机制。

 

 

 

 

重点:有效的利用资源(生产一个包子,吃一个包子,再生产一个包子,在吃一个包子.)。
通信:对包子的状态进行判断
  没有包子-->吃货线程唤醒包子铺线程-->吃货线程等待-->包子铺线程做包子-->做好包子-->修改包子的状态为有

  有包子-->包子铺线程唤醒吃货钱程-->包子铺线程等待-->吃货吃包子-->吃完包子-->修改包子的状态为没有

  没有包子-->吃贷线程唤酯包子铺线程-->吃贷线程等待-->包子铺线程做包子-->做好包子-->修改包子的状态为有

  ........

 

等待唤醒中的方法

等待唤醒机制就是用于解决线程间通信的问题的,使用到的3个方法的含义如下:

1. wait :线程不再活动,不再参与调度,进入wait set中,因此不会浪费CPU资源,也不会去竞争锁了,这时的线程状态即是WAITING。

    它还要等着别的线程执行一个特别的动作,也即是“通知( notify) "在这个对象上等待的线程从wait set中释放出来,重新进入到调度队列( ready queue )中

2.notify :则选取所通知对象的wait set 中的一个线程释放﹔例如,餐馆有空位置后,等候就餐最久的顾客最先入座。

3. notifyAll:则释放所通知对象的wait set 上的全部线程。

 

 

 

 

 

等待唤醒机制需求分析

资源类:

  设置包子属性:皮、馅

   包子的状态:有true,没有false

生产者(包子铺)类:是一个线程类,可以继承Thread

   设置线程任务(run):生产包子

   对包子的状态进行判断

    true:有包子,

        包子铺调用调用wait方法进入等待状态

    false:没有包子,

        包子铺生产包子,交替生产两种包子

            有两种状态(i%2==0)

        包子铺生产好了,修改包子的状态为true,有。

        唤醒吃货线程,让吃货线程吃包子。

 

消费者(吃货类):是一个线程类,可以继承Thread

    设置线程任务(run):吃包子

    对包子的状态进行判断

    false:没有包子,

        吃货线程调用wait方法进入等待状态  

    true:有包子,

        吃货吃包子,吃完包子修改包子状态为false没有

        吃货唤醒包子铺线程,生产包子

 

测试类:

  包含main方法,程序执行的入口,启动程序

  创建包子对象,创建包子铺线程并开启,创建吃货线程并开启

    

标签:包子铺,--,等待,吃货,概述,线程,唤醒,包子,wait
来源: https://www.cnblogs.com/xjw12345/p/16462540.html

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

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

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

ICode9版权所有