同时启动2个线程,一个线程打印A,一个线程打印B,实现ABAB这样轮流打印,每个线程打印10次,如何实现?
时间: 2024-04-10 08:28:10 浏览: 76
你可以使用线程同步的方式来实现ABAB轮流打印。可以使用信号量来控制两个线程的执行顺序和打印次数。
下面是一个示例代码,使用Java的多线程实现:
```java
import java.util.concurrent.Semaphore;
public class PrintAB {
private static Semaphore semaphoreA = new Semaphore(1);
private static Semaphore semaphoreB = new Semaphore(0);
public static void main(String[] args) {
Thread threadA = new Thread(new PrintThread('A', semaphoreA, semaphoreB));
Thread threadB = new Thread(new PrintThread('B', semaphoreB, semaphoreA));
threadA.start();
threadB.start();
}
static class PrintThread implements Runnable {
private char printChar;
private Semaphore currentSemaphore;
private Semaphore nextSemaphore;
public PrintThread(char printChar, Semaphore currentSemaphore, Semaphore nextSemaphore) {
this.printChar = printChar;
this.currentSemaphore = currentSemaphore;
this.nextSemaphore = nextSemaphore;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
currentSemaphore.acquire(); // 获取当前线程的信号量
System.out.print(printChar); // 打印字符
nextSemaphore.release(); // 释放下一个线程的信号量
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
该示例中,使用了两个信号量:`semaphoreA`和`semaphoreB`,初始时,`semaphoreA`的计数为1,`semaphoreB`的计数为0。线程A先获得`semaphoreA`的信号量,打印字符A,然后释放`semaphoreB`的信号量。线程B获得`semaphoreB`的信号量,打印字符B,然后释放`semaphoreA`的信号量。两个线程通过获取和释放信号量的方式实现轮流打印。
这样,线程A和线程B会交替打印10次,最终输出结果为ABABABABABABABABABAB。
阅读全文