【多线程】交替输出abc
2024-10-21 14:43:14
package com.xf; public class WaitNotify {
// 等待标记
private int flag;
// 循环次数
private final int loopNumber; public WaitNotify(int flag, int loopNumber) {
this.flag = flag;
this.loopNumber = loopNumber;
} // 打印
public void print(String str, int waitFlag, int nextFlag) {
for (int i = 0; i < loopNumber; i++) {
synchronized (this) {
// 未获得锁
while (flag != waitFlag) {
try {
this.wait(); // 进入等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 获得了锁
System.out.print(str);
flag = nextFlag; // 等待标记改为下一个标记
this.notifyAll(); // 唤醒所有线程, 再与等待标记对比
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package com.xf; public class aaa { public static void main(String[] args) {
WaitNotify wn = new WaitNotify(1, 500);// 首先把等待标记设为1, 循环次数设为5次
new Thread(() -> {
wn.print("a", 1, 2); // a的等待标记是1, 下一个标记是2
}).start();
new Thread(() -> {
wn.print("b", 2, 3); // b的等待标记是2, 下一个标记是3
}).start();
new Thread(() -> {
wn.print("c", 3, 1); // c的等待标记是3, 下一个标记是1
}).start();
}
}
最新文章
- 11大Java开源中文分词器的使用方法和分词效果对比
- VS Extract Method
- 【分享】学长的安利来了~~O(∩_∩)O
- Java写的爬虫的基本程序
- SVN 中trunk、branches、tags
- iOS横竖屏切换的一些坑(持续更新)
- Windows 7 USB DVD Download Tool 制作的U盘无法启动安装Windows7 SP1
- angualr4 路由 总结笔记
- Linux 高性能服务器编程——IP协议详解
- Linux文件的扩展名--2019-04-25
- JAVA核心技术I---JAVA回顾
- web@h,c小总结
- SQL 性能不佳的几个原因
- ubuntu 14.04安装mysql数据库
- LetExpr表达式解读
- C# 调用WebService服务
- windows查看系统版本号
- 解决ecplise+phthon2.7中使用pytesser和tesseract进行ocr,出现报错的问题
- Memcache的客户端连接系列(四) PHP
- AES前后加密算法代码
热门文章
- Electron是什么以及可以做什么
- 【题解】CF991C Candies
- 「工具推荐」golang 代码可视化工具 go-callvis
- Go语言核心36讲18
- CPU体系(2):ARM Store Buffer
- Day19:属性封装详解
- .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
- SpringBoot3.x中spring.factories功能被移除的解决方案
- 【大数据面试】Flink 04:状态编程与容错机制、Table API、SQL、Flink CEP
- Flask框架使用SQLAlchemy的ORM