Java第二十六天,多线程等待换新机制(严格执行化)
代码:
1.老板类:
package com.lanyue.day26;
public class bossRunnable implements Runnable {
public myLock lock;
public void setLock(myLock lock){
this.lock = lock;
}
@Override
public void run() {
while(true){
synchronized (lock){
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
System.out.println("系统故障");
}
if(lock.flag()){
System.out.println("老板:小刘给我倒杯水去");
System.out.println("老板:小张给我整理一下资料");
lock.notifyAll();
}
}
}
}
}
2.员工一类:
package com.lanyue.day26;
public class customerOneRunnable implements Runnable {
private myLock lock;
@Override
public void run() {
while (true){
synchronized (lock){
if(lock.flag % 2 == 0){
System.out.println("小刘:老板,我有什么可以帮助你的吗?");
lock.flagTime++;
try {
lock.wait();
} catch (InterruptedException e) {
System.out.println("系统出现故障");
}
System.out.println("小刘:好的老板。");
lock.flag++;
}
}
}
}
public void setLock(myLock lock){
this.lock = lock;
}
}
3.员工二类:
package com.lanyue.day26;
public class customerTwoRunnable implements Runnable {
public myLock lock;
public void setLock(myLock lock){
this.lock = lock;
}
@Override
public void run() {
while(true){
synchronized(lock){
if(lock.flag % 2 == 0){
System.out.println("小张:老板,请问有什么吩咐");
lock.flagTime++;
try {
lock.wait();
} catch (InterruptedException e) {
System.out.println("系统出现故障");
}
System.out.println("小张:已经准备好了");
lock.flag++;
}
}
}
}
}
4.控制锁类:
package com.lanyue.day26;
public class myLock {
public String name;
public int flag = 0;
public int flagTime = 0;
public void setName(String name){
this.name = name;
}
public boolean flag(){
if(flagTime == 2){
flagTime = 0;
return true;
}else{
return false;
}
}
}
执行代码:
package com.lanyue.day26;
public class TestDemo {
public static void main(String[] args) {
bossRunnable boss = new bossRunnable();
customerOneRunnable cusOne = new customerOneRunnable();
customerTwoRunnable cusTwo = new customerTwoRunnable();
myLock lock = new myLock();
lock.setName("同步锁");
boss.setLock(lock);
cusOne.setLock(lock);
cusTwo.setLock(lock);
Thread one = new Thread(boss);
Thread two = new Thread(cusOne);
Thread three = new Thread(cusTwo);
one.start();
two.start();
three.start();
}
}
Java第二十六天,多线程等待换新机制(严格执行化)的更多相关文章
- javaSE第二十六天
第二十六天 414 1:网络编程(理解) 414 (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享 414 (2)网络编程模型 414 (3)网络编程的三要素 ...
- IT第二十六天 - Swing、上周总结
IT第二十六天 上午 Swing 1.对于方法的参数如果是int数值类型,应该直接调用该类中的常量属性,而不应该直接填入数字 2.Toolkit类中定义的方法是可以直接访问本地计算机(操作系统)信息的 ...
- Python第二十六天 python装饰器
Python第二十六天 python装饰器 装饰器Python 2.4 开始提供了装饰器( decorator ),装饰器作为修改函数的一种便捷方式,为工程师编写程序提供了便利性和灵活性装饰器本质上就 ...
- “全栈2019”Java第二十九章:数组详解(中篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十八章:数组详解(上篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十六章:流程控制语句中循环语句do-while
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十五章:流程控制语句中循环语句while
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十二章:控制流程语句中的决策语句if-else
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- Object.keys()方法
一.定义和用法 返回对象的可枚举属性和方法的名称.二.参数 obj:要返回器枚举自身属性的对象.三.返回值 返回一个所有元素为字符串的数组,其元素来自于从给定的obj里可直接枚举的属性.这些属性的顺序 ...
- Event loops秒懂
Event loops秒懂 简介 JS是一种单线程脚本语言,为什么要设计成单线程? 举例说明,假设JS是多线程脚本语言,A线程修改了DOM,B线程删除了DOM,一旦B线程先执行完,DOM被删除了,A线 ...
- Java中static和final的解析
static关键字和final关键字是Java中一个难点&重点.本文通过static的用途.常见问题.final的用途.final常见问题,以及static和final的对比来解释这两个关键字 ...
- Airtest,Poco,Unity自动化测试集成
作为一个Game Developer,测试部分是必不可少,程序完成需求首先要进行S0相关的测试,这样确保交付到策划验收和QA验收时是没有阻断性的bug或者显而易见代码缺陷.那么如何去做测试用例呢?肯定 ...
- golang socket编程 net.Conn IO.EOF解读
结论 首先,先定义下我的理解,当在Read时,收到一个IO.EOF,代表的就是对端已经关闭了发送的通道,通常来说是发起了FIN. 那么根据自己的实际业务,就可以进行判断,这里的IO.EOF到底该怎么利 ...
- Log4j不写入日志文件排错记录
背景: 之前用 log4j一直设置的输出到控制台.今天由于job任务出现了异常,因为是异步的,没办法在控制台看错误信息了,于是乎决定把日志打印到文件里面.然后就找了篇博客配置了下.但是配置完后,怎么也 ...
- angualrjs 总结 随记(一)
$apply方法的作用 $apply方法是用来触发脏检查,它在控制器里监听一个变量,每当这个变量的值改变的时候,它会去与最初的值做一次比较,然后HTML页面就会及时更新该变量的值(将最新的值赋值到ht ...
- PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境配置
0x01 Xdebug安装 参考:https://xdebug.org/docs/install cd xdebug-/ phpize sudo ./configure --enable-xdebug ...
- Swagger2在DBA Service中生成RESTful API的实践
目的与背景: 目的:对外暴露DBA Service必要的RESTful API,形成规整的API文档 背景:DBA Service后端采用Spring-boot,属于Spring家族,故生成API的工 ...
- Ubuntu16.04下安装搜狗输入法及实现中英文转换问题
1.问题描述 版本信息:Ubuntu16.04 解决问题:搜狗输入法的安装 2.解决办法 STEP1:搜索搜狗输入法for Linux --> 选择64bit --> 下载得到一个sogo ...