包子铺

02_Java语音进阶||day07_等待与唤醒案例、线程池、Lambda表达式

走远了吗. 提交于 2020-03-05 21:55:28
第一章 等待唤醒机制 1.1 线程间通信 概念: 多个线程在处理同一个资源 (包子), 但是处理的动作(线程的任务)却不相同。 比如: 线程A用来生产包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么 线程A与线程B之间 就存在 线程通信问题 1.2 等待唤醒机制 等待与唤醒机制: 线程之间的通信 【重点】:有效的利用资源[包子] (生产一个包子,吃一个包子,再生产一个包子,再吃一个包子) 通信:对包子的状态进行判断 * ==没有==包子-->吃货线程唤醒包子铺线程-->吃货线程等待-->包子铺线程做包子-->做好包子-->修改包子的状态==有== * ==有==包子-->包子铺线程唤醒吃货线程-->包子铺线程等待-->吃货线程吃包子-->修改包子的状态==没有== * ==没有==包子-->吃货线程唤醒包子铺线程-->吃货线程等待-->包子铺线程做包子-->做好包子-->修改包子的状态==有== * ... 等待唤醒中的方法 void wait () 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。 void notify () 唤醒在此对象监视器上等待的 单个线程 。 注:会继续执行wait方法之后的代码 void notifyAll () 唤醒在此对象监视器上等待的

多线程之包子铺

冷暖自知 提交于 2019-12-29 21:41:13
需求分析: 包子类:皮、馅、是否有货。 包子铺:有个锁对象(包子)、先判断包子是否有货(flag是否等于false) 若有货-》包子铺调用wait()进入休息状态 若无货-》包子铺开始做包子-》做好包子修改包子的flag为true并调用notify()唤醒顾客线程 顾客:有个锁对象(包子)、先判断还有没有包子(flag是否等于true) 若有货-》顾客开始吃包子,吃完包子后将flag设置为false并调用notify()唤醒包子铺开始做包子 若无货-》则调用wait() 具体代码如下: 包子类: public class BaoZi { public String Pi; public String Xian; public boolean flag; } 包子铺类: import java.util.Random; public class BaoZiPu extends Thread { private BaoZi bz; public BaoZiPu(BaoZi bz){ this.bz = bz; } @Override public void run() { String pis[]={"玉米皮","小麦皮","大豆皮","无皮"}; String xians[]={"西葫芦","虾米","韭菜","猪肉大葱"}; int i=0,j=0; while (true){

等待唤醒机制---Day25

送分小仙女□ 提交于 2019-12-06 01:08:28
线程间通信   概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。   比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个 是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。   为什么要处理线程间通信:     多个线程并发执行时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一项任务时,我们都知道执行任务时一般都是按规律或者规则来执行,所以多线程执行任务也是一样,需要规律来协调通信,以此来帮我们达到多线程共同操作一项任务(一份数据)。   如何保证线程间通信有效执行任务(利用资源):     多个线程在处理同一个资源,并且任务不同时,需要线程通信来帮助解决线程之间对同一个变量的使用或操作。 因为多个线程在操作同一份数据时, 要避免对同一共享变量的争夺。因此我们需要通过一定的手段使各个线程能有效的利用资源。而这种手段即—— 等待唤醒机制 等待唤醒机制   什么时等待唤醒机制     这是多个线程间的一种协作机制。谈到线程我们经常想到的是线程间的竞争(race),比如去争夺锁,但这并不是故事的全部,线程间也会有协作机制,就是在一个线程进行了规定操作后,就进入等待状态(wait()), 等待其他线程执行完他们的指定代码过后再将其唤醒(notify());在有多个线程进行等待时,