Java第二十六天,多线程等待换新机制(严格执行化)
2024-10-08 22:10:03
代码:
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();
}
}
最新文章
- bzoj1045 糖果传递
- JavaScript学习笔记- 省市级联效果
- iOS多线程GCD
- Salesforce 生成测试可用 Id
- PAAS平台的web应用性能测试与分析
- 阿里巴巴Double分布式服务框架
- hdu 2077
- Android应用开发学习笔记之菜单
- mysql 交叉表
- [RxJS] Logging a Stream with do()
- oracle tablespace
- BZOJ 1834: [ZJOI2010]network 网络扩容(最大流+最小费用最大流)
- Python每日一练(2):找出html中的所有链接(Xpath、正则两个版本)
- 用Verilog实现IIC通讯
- [SDOI2010]地精部落
- C++Primer学习——动态内存
- Struts2知识点学习笔记
- 03-Python入门学习-Python基础
- Python 和 Scikit-Learn
- MDX Cookbook 04 - 在集合中实现 NOT IN 逻辑 (Minus, Except, Filter 等符号和函数的使用)