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();
}
}

最新文章

  1. 11大Java开源中文分词器的使用方法和分词效果对比
  2. VS Extract Method
  3. 【分享】学长的安利来了~~O(∩_∩)O
  4. Java写的爬虫的基本程序
  5. SVN 中trunk、branches、tags
  6. iOS横竖屏切换的一些坑(持续更新)
  7. Windows 7 USB DVD Download Tool 制作的U盘无法启动安装Windows7 SP1
  8. angualr4 路由 总结笔记
  9. Linux 高性能服务器编程——IP协议详解
  10. Linux文件的扩展名--2019-04-25
  11. JAVA核心技术I---JAVA回顾
  12. web@h,c小总结
  13. SQL 性能不佳的几个原因
  14. ubuntu 14.04安装mysql数据库
  15. LetExpr表达式解读
  16. C# 调用WebService服务
  17. windows查看系统版本号
  18. 解决ecplise+phthon2.7中使用pytesser和tesseract进行ocr,出现报错的问题
  19. Memcache的客户端连接系列(四) PHP
  20. AES前后加密算法代码

热门文章

  1. Electron是什么以及可以做什么
  2. 【题解】CF991C Candies
  3. 「工具推荐」golang 代码可视化工具 go-callvis
  4. Go语言核心36讲18
  5. CPU体系(2):ARM Store Buffer
  6. Day19:属性封装详解
  7. .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
  8. SpringBoot3.x中spring.factories功能被移除的解决方案
  9. 【大数据面试】Flink 04:状态编程与容错机制、Table API、SQL、Flink CEP
  10. Flask框架使用SQLAlchemy的ORM