【多线程】交替输出abc
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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2021-08-31 数据采集之刷cnblog评论