代码实现三个线程循环打印 ABC重复 50 次
以下是一种实现方式,使用 Java 的多线程和锁机制:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class PrintABC {
private static final int PRINT_TIMES = 50;
private static final Lock lock = new ReentrantLock();
private static final Condition conditionA = lock.newCondition();
private static final Condition conditionB = lock.newCondition();
private static final Condition conditionC = lock.newCondition();
private static volatile int state = 0;
public static void main(String[] args) {
Thread threadA = new Thread(new PrintThread("A", 0, conditionA, conditionB));
Thread threadB = new Thread(new PrintThread("B", 1, conditionB, conditionC));
Thread threadC = new Thread(new PrintThread("C", 2, conditionC, conditionA));
threadA.start();
threadB.start();
threadC.start();
}
static class PrintThread implements Runnable {
private final String name;
private final int targetState;
private final Condition currentCondition;
private final Condition nextCondition;
public PrintThread(String name, int targetState, Condition currentCondition, Condition nextCondition) {
this.name = name;
this.targetState = targetState;
this.currentCondition = currentCondition;
this.nextCondition = nextCondition;
}
@Override
public void run() {
for (int i = 0; i < PRINT_TIMES; i++) {
lock.lock();
try {
while (state % 3 != targetState) {
currentCondition.await();
}
System.out.print(name);
state++;
nextCondition.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
}
}
这段代码创建了三个线程,每个线程分别打印字符 A、B、C,并且使用 state 变量来控制线程的执行顺序。每个线程在打印完成后会唤醒下一个线程,通过 currentCondition.await() 和 nextCondition.signal() 实现线程间的协作。每个线程打印 50 次,最终输出的结果为循环打印 ABC 50 次
原文地址: https://www.cveoy.top/t/topic/irEM 著作权归作者所有。请勿转载和采集!