有abc三个线程,每个线程体都打印自己的代码,比如 a打印a,b打印b,c打印c,怎么保证在主线程启用三个线程后,打印时按照abc顺序打印。用java语言举例
时间: 2024-02-25 16:51:55 浏览: 91
3个线程,根据不同规则打印线程名称
可以使用Java中的CountDownLatch来实现按照abc顺序打印。CountDownLatch是一个同步工具类,它可以使一个线程等待其他线程完成一定的工作后再执行。
具体实现方法如下:
```java
import java.util.concurrent.CountDownLatch;
public class PrintABC {
public static void main(String[] args) {
CountDownLatch latch1 = new CountDownLatch(1);
CountDownLatch latch2 = new CountDownLatch(1);
Thread a = new Thread(() -> {
try {
latch1.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("a");
latch2.countDown();
});
Thread b = new Thread(() -> {
try {
latch2.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("b");
latch1.countDown();
latch2.countDown();
});
Thread c = new Thread(() -> {
try {
latch2.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("c");
latch1.countDown();
latch2.countDown();
});
c.start();
b.start();
a.start();
latch1.countDown();
}
}
```
在主线程中创建两个CountDownLatch对象,一个用来控制线程a的执行,一个用来控制线程b和c的执行。然后创建线程a、b、c,在线程a中调用latch1.await()方法等待主线程调用latch1.countDown()方法,线程b和c中调用latch2.await()方法等待线程a打印后调用latch2.countDown()方法,然后再分别打印自己的字母,并且调用latch1.countDown()和latch2.countDown()方法通知其他线程可以执行。最后在主线程中调用latch1.countDown()方法启动线程a的执行。
通过使用CountDownLatch,我们可以保证线程a先执行,然后再是线程b和c,最后按照顺序打印a、b、c。
阅读全文