包子类&包子铺类

资源类:包子类设置包子的属性


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

package Demo01.WaitAndNotify;

/**
* 资源类:包子类设置包子的属性
* 皮
* 陷
* 包子的状态:有true,没有false
*/
public class BaoZi {
//皮
String pi;
//陷
String xian;
//包子的状态:有true,没有false,设置初始值为false没有包子
boolean flag =false; }
package Demo01.WaitAndNotify;

/*
生产者(包子铺)类:是一个线程类,可以继承Thread设置线程任务(run ):生产包子
对包子的状态进行判断
true:有包子
包子铺调用wait方法进入等待状态false:没有包子
包子铺生产包子
增加一些趣味性:交替生产两种包子
有两种状态(i%2==0)
包子铺生产好了包子
修改包子的状态为true有
唤醒吃货线程,让吃货线程吃包子 */
public class BaoZuPu extends Thread {
private final BaoZi bz; public BaoZuPu(BaoZi bz) {
this.bz = bz;
} @Override
public void run() {
while (true) {
//定义一个变量
int count = 0;
//必须同时同步技术保证两个线程只能有一个在执行
synchronized (bz) {
//对包子的状态进行判断
if (bz.flag == true) {
//包子铺调用wait方法进入等待状态
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("包子铺正在生产:" + bz.pi + bz.xian + "包子");
//生产包子需要3秒钟
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
//包子铺生产好了包子
//修改包子的状态为true有
bz.flag = true;
//唤醒吃货线程,让吃或线程吃包子
bz.notify();
System.out.println("包子铺已经生产好了:" + bz.pi + bz.xian + "包子,吃货可以开始了");
}
}
}
}

吃货类&测试类

消费者(吃货)类:是一个线程类,可以继承Thread设置线程任务(run):吃包子
对包子的状态进行判断
false:没有包子
吃货调用wait方法进入等待状态true:有包子
吃货吃包子吃货吃完包子
修改包子的状态为false没有吃货唤醒包子铺线程,生产包子
package Demo01.WaitAndNotify;

/*
l.
消费者(吃货)类:是一个线程类,可以继承Thread设置线程任务(run):吃包子
对包子的状态进行判断
false:没有包子
吃货调用wait方法进入等待状态true:有包子
吃货吃包子吃货吃完包子
修改包子的状态为false没有吃货唤醒包子铺线程,生产包子 */
public class ChiHuo extends Thread {
private final BaoZi bz; public ChiHuo(BaoZi bz) {
this.bz = bz;
} //设置线程任务(run):吃包子
@Override
public void run() {
//使用死循环,让吃货一直吃包子
while (true) {
//必须同时同步技术保证两个线程只能有一个在执行
synchronized (bz) {
//对包子的状态进行判断
if (bz.flag == false) {
//吃货调用wait方法进入等待状态
try {
bz.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//被唤醒之后执行的代码.吃包子
System.out.println("吃货正在吃"+bz.pi+bz.xian+"的包子");
//吃货吃完包子
//修改包子的状态为false
bz.flag=false;
//吃货唤醒包子铺线程,生产包子
bz.notify();
System.out.println("吃货已经把"+bz.pi+bz.xian+"的包子吃完了,包子铺开始成生产包子");
System.out.println("----------------------------------------------------------"); }
} }
}
package Demo01.WaitAndNotify;
/*
测试类;
包含main方法,程序执行的入口,启动程序创建包子对象;
创建包子铺线程,开启,生产包子;创建吃货线程,开启,吃包子; */
public class Demo {
public static void main(String[] args) {
//创建包子对象
BaoZi bz = new BaoZi();
//创建包子铺线程,开启生产包子
new BaoZuPu(bz).start();
//创建吃货线程
new ChiHuo(bz).start();
}
}

包子类&包子铺类-吃货类&测试类的更多相关文章

  1. 等待唤醒机制代码实现_包子类&包子铺类和等待唤醒机制代码实现_吃货类&测试类

    资源类:包子类 设置包子的属性 皮 陷 包子的状态:有 true 没有 false public class BaoZi { //皮 String pi; //陷 String xian; //包子的 ...

  2. Spring Boot超简单的测试类demo

    1 概述 Spring Boot结合Junit的简单测试类demo,流程是先引入依赖,接着编写测试类测试运行即可. 2 依赖 <dependency> <groupId>org ...

  3. Spring-test使用JUnit时,测试类autowired报错,create bean error

    Spring-test使用JUnit时,测试类里面使用autowired会报错, 报create bean error...... 但是controller里面@autowired可以正常运行的. 在 ...

  4. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

  5. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...

  6. 在Eclipse中生成接口的JUnit测试类

    在Spring相关应用中,我们经常使用“接口” + “实现类” 的形式,为了方便,使用Eclipse自动生成Junit测试类. 1. 类名-new-Other-java-Junit-Junit Tes ...

  7. TestNG之执行测试类方式

    TestNG提供了很多执行方式,下面做简单介绍. 1.XML指明测试类,按照类名执行,其中可以指定包名,也可指定无包名: 带包名,运行ParameterSample类和ParameterTest类 & ...

  8. XCode中的单元测试:编写测试类和方法(内容意译自苹果官方文档)

    当你在工程中通过测试导航栏添加了一个测试target之后, xcode会在测试导航栏中显示该target所属的测试类和方法. 这一章演示了怎么创建测试类,以及如何编写测试方法. 测试targets, ...

  9. 各种数据库连接代码的测试类(java)

    测试类: public class Mytest { Connection conn=null; Statement stmt=null; String myDriver="com.mysq ...

随机推荐

  1. appium 移动端自动化测试工具

    appium 移动端自动化测试工具 appium 移动端自动化测试工具 appium 是哟个自动化测试开源工具 支持ios和安卓平台的应用 以及web应用和混合应用 appium 是一个跨平台的工具: ...

  2. Python基础阶段总结:ATM项目实战

    目录 ATM逻辑描述 三层框架简介 1.第一层(src.py) 2.第二层(interface文件夹下内容) 3.第三层(db_hanlder) 启动函数 用户注册功能 用户登录 common中的小功 ...

  3. python中展示json数据不换行(手动换行)

    https://blog.csdn.net/chichu261/article/details/82784904 Settings ->keymap -> 在搜索框输入 wraps -&g ...

  4. Codeforces Round #802 (Div. 2)C. Helping the Nature(差分)

    题目链接 题目大意: 给你一个有n个元素的数组a,你可以通过一下三种操作使数组的每一个值都为0: 选择一个下标i,然后让a[1],a[2]....a[ i ] 都减一; 选择一个下标i,然后让a[i] ...

  5. Linux网络通信(线程池和线程池版本的服务器代码)

    线程池 介绍 线程池: 一种线程使用模式.线程过多会带来调度开销,进而影响缓存局部性和整体性能.而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务.这避免了在处理短时间任务时创建与销毁线程的 ...

  6. C#pictureBox滚轮缩放与拖拽

    [转载]C#pictureBox滚轮缩放与拖拽 [转载]C#中图像平移.缩放的实现技巧 [转载]c# 通过鼠标拖动.放大图片,GDI绘图通过鼠标拖动.放大

  7. i春秋Do you know upload?

    打开题目是一个文件上传,就先写了一个一句话木马的php文件,直接提交显示文件类型不允许.于是乎将其改为jpeg格式上传,成功了,但是没用,菜刀连不上.再次上传jpg格式的一句话木马(写好php木马后将 ...

  8. AFL源码分析(一)

    AFL源码分析(一) 文章首发于:ChaMd5公众号 https://mp.weixin.qq.com/s/E-D_M25xv5gIpRa6k8xOvw a.alf-gcc.c 1.find_as 这 ...

  9. win 10 玩红警/黑边,不能全屏,闪退

    win 10玩红警黑边问题 1.下载ddraw.dll,放在游戏目录 下载链接:ddraw.dll 如果提示 选择保留就行了 2.Win 键+S键,搜索注册表,打开这个 进去按这个路径    计算机\ ...

  10. 修改msi文件

    前言 msi文件是一个安装包文件,可以看做一个数据库,其中包含很多资源,例如图片,配置文件,可执行文件exe等等. 我想要把修改过 exe可执行文件提交到msi文件中,那么就需要知道msi文件的构成, ...