[java] 控制三个线程按顺序交替输出数字1、2、3
控制三个线程按顺序交替输出数字1、2、3
使用synchronized和wait/notify机制实现三个线程交替输出数字1、2、3。通过共享锁对象lock控制线程同步,currentThreadNum变量指示当前应执行的线程。每个线程在print方法中循环等待轮到自己执行,输出对应数字后唤醒其他线程,并按1→2→3→1的顺序切换执行权。主方法创建三个线程分别调用printOne()、printTwo()和printThree(),实现交替输出指定次数的数字序列。程序展示了多线程间的精确协调控制。
public class AlternateOutput {private static final Object lock = new Object();private static volatile int currentThreadNum = 1;private static final int count = 20;private static void runTask(int currentThreadNum, int nextThreadNum, String output) {for (int i = 0; i < count; i++) {synchronized (lock) {while (AlternateOutput.currentThreadNum != currentThreadNum) {try {lock.wait();} catch (InterruptedException e) {Thread.currentThread().interrupt();return;}}System.out.print(output);AlternateOutput.currentThreadNum = nextThreadNum;lock.notifyAll();}}}public static void main(String[] args) {Thread t1 = new Thread(() -> {runTask(1, 2, "1");});t1.start();Thread t2 = new Thread(() -> {runTask(2, 3, "2");});t2.start();Thread t3 = new Thread(() -> {runTask(3, 1, "3");});t3.start();// 确保主线程等待所有子线程完成执行后才结束,避免主线程提前退出导致子线程被强制终止try {t1.join();t2.join();t3.join();} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
}