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第 ...
随机推荐
- ES6整体内容
ES6内容: 附网站链接:http://www.jscwwd.com/article/5e6488e849a13d1a89caf574
- 用 jQuery 实现表单验证(摘抄)——选自《锋利的jQuery》(第2版)第5章的例题 5.1.5 表单验证
5.1.5 表单验证 表单(form)作为 HTML 最重要的一个组成部分,几乎在每个网页上都有体现,例如用户提交信息.用户反馈信息和用户查询信息等,因此它是网站管理者与浏览者之间沟通的桥梁.在表单中 ...
- word文档常用的格式操作(分页、分节、每一节如何设置页码、以及生成目录)
分页: 分节: 自动生成目录:
- 基于《仙剑奇侠传柔情版》利用Java的简单实现(一)
基于<仙剑奇侠传柔情版>利用Java的简单实现(一) 2018-12-01 23:55:36 by Louis 一,新建一个类GameFrame.class,具体代码如下: pack ...
- 创建Sphinx + GitHub + ReadtheDocs托管文档
最新博客链接 "Tsanfer's Blog" 创建Sphinx + GitHub + ReadtheDocs托管文档 Readthedocs在线电子书链接
- Django 缓存机制
一 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消 ...
- B - Yet Another Palindrome Problem的简单方法
You are given an array aa consisting of nn integers. Your task is to determine if aa has some subseq ...
- 《利用Hyper-V搭建虚拟机》一篇管够,持续更新
开门见山:win10+Hyper-V+ContOS7.X 万物皆有目的:没钱买云服务器,但平时在家想持续学习,可以考虑在自己windows上搭建一台虚拟机,然后装上Linux,调试通网络进行开发. 涉 ...
- CodeForces - 1006F (深搜从两端向中间搜,省时)
题意:输入n,m,k,给出一个n*m的图,里面有权值,从1,1一路异或到n,m,只能向右或向下走,等于k有多少种路径. 思路:一开始就是直接暴力写个深搜,稳稳的超时,分析一下时间复杂度.每个点有两个方 ...
- EF Core 数据变更自动审计设计
EF Core 数据变更自动审计设计 Intro 有的时候我们需要知道每个数据表的变更记录以便做一些数据审计,数据恢复以及数据同步等之类的事情, EF 自带了对象追踪,使得我们可以很方便的做一些审计工 ...