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第 ...
随机推荐
- 从零搭建Spring Cloud Gateway网关(二)—— 打印请求响应日志
作为网关,日志记录是必不可少的功能,可以在网关出增加requestId来查询整个请求链的调用执行情况等等. 打印请求日志 打印请求日志最重要的就是打印请求参数这些东西,不过RequestBody通常情 ...
- java 锁 简介(转)
转自 https://www.cnblogs.com/hustzzl/p/9343797.html 1. Java锁的种类 在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁.读写锁等等,非常繁多, ...
- Python习题集(一)
每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! 题目 有一个数据list of dict如下 a = [ {"}, {"}, {"}, ] 写入到本 ...
- 【Weiss】【第03章】练习3.8:有序多项式求幂
[练习3.8] 编写一个程序,输入一个多项式F(X),计算出(F(X))P.你程序的时间复杂度是多少? Answer: (特例:P==0时,返回1.) 如果P是偶数,那么就递归计算((F(X))P/2 ...
- golang socket编程 net.Conn IO.EOF解读
结论 首先,先定义下我的理解,当在Read时,收到一个IO.EOF,代表的就是对端已经关闭了发送的通道,通常来说是发起了FIN. 那么根据自己的实际业务,就可以进行判断,这里的IO.EOF到底该怎么利 ...
- Mybatis(三)Mybatis映射开发
4.1 一对一 4.1.1 表对应关系, 一个订单对应一个用户 4.1.2 实体对应关系 public class Order { private int id; private Date order ...
- 使用Eclipse开发python
第一步:下载python插件http://sourceforge.net/projects/pydev/files/pydev/PyDev%204.1.0/第二步:在Eclipse上安装插件a.假设E ...
- 图-搜索-DFS-51. N皇后
2020-03-15 19:49:59 问题描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n ...
- 贪心-Bag of Tokens
2020-01-20 22:32:28 问题描述: 问题求解: 双指针 + 贪心. public int bagOfTokensScore(int[] tokens, int P) { Arrays. ...
- 切比雪夫低副瓣阵列设计 MATLAB
相控阵天线中,直线阵列作为重要的一种,有着极为广泛的应用.切比雪夫低副瓣阵列设计是一种典型的设计方法. 切比雪夫方法主要是实现低副瓣.窄波束: 其产生的核心如下: 我的理解:因为能量守恒,所有副瓣都一 ...