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第 ...
随机推荐
- PDIUSBD12管脚简述
PDIUSBD12管脚简述 PDIUSBD12管脚及简述 PDIUSBD12读写时序图 CS_N是片选信号,当片选信号位低电平时,下面的操作才有效.由于板子上将CS_N接地,所以它一 ...
- python的元类编程
廖雪峰的python教程有python元类编程示例,综合代码如下 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df ...
- 4. selenium中鼠标和键盘操作
一.鼠标操作 第一步:引入模块函数 from selenium.webdriver.common.action_chains import ActionChains 第二步:元素定位 element ...
- 一个简单的方法去掉angular application中URLs的hashtag
本文转载自:Pretty URLs in AngularJS: Removing the # By default, AngularJS will route URLs with a hashtag. ...
- DIV常用属性大全
目录 一.属性列表 二.常用属性 三.一些特殊效果 四.定位和控制 一.属性列表 color : #999999 文字颜色 font-family : 宋体 文字字型 font-size : 10pt ...
- Python第二章-变量和数据类型
变量和数据类型 一.什么是变量,常量 思考:程序执行指的是什么? 对数据进行存储处理和计算,最终获得结果,这是程序执行的本质. 变量的概念和在数学中的变量的概念一样的,只是在计算机程序中,变量不仅可以 ...
- python之面向对象的关系
一.从空间角度研究类 类外面可以给对象封装属性 class A: address = '美丽富饶的沙河' def __init__(self, name): self.name = name def ...
- NLPer,你知道最近很火的自然语言处理库么?
介绍 "NLP's ImageNet moment has arrived." 想象一下我们有能力构建支持谷歌翻译的自然语言处理(NLP)模型,并且在Python中仅需几行代码来完 ...
- ArcGIS Server的安装
1.双击ArcGIS Server安装目录下的Setup.exe. 2.点击“Next”. 3.选择“I accept the license agreement”,点击“Next”. 4.点击“Ch ...
- coding++:拦截器拦截requestbody数据如何防止流被读取后数据丢失
1):现在开发的项目是基于SpringBoot的maven项目,拦截器的使用很多时候是必不可少的,当有需要需要你对body中的值进行校验,例如加密验签.防重复提交.内容校验等等. 2):当你开开心心的 ...