要求创建3个线程,分别打印ABC,共交替打印10次。
public class Main {
// 以A开始的信号量,初始信号量数量为1
private static Semaphore A = new Semaphore(1);
// B、C信号量,A完成后开始,初始信号数量为0
private static Semaphore B = new Semaphore(0);
private static Semaphore C = new Semaphore(0);
public static void main(String[] args) {
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
// A获取信号执行,A信号量减1,当A为0时将无法继续获得该信号量
A.acquire();
System.out.print("A");
// B释放信号,B信号量加1(初始为0),此时可以获取B信号量
B.release();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
B.acquire();
System.out.print("B");
C.release();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
C.acquire();
System.out.print("C");
A.release();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
控制台输出:
ABCABCABCABCABCABCABCABCABCABC
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://yunfan.blog.csdn.net/article/details/126085143
内容来源于网络,如有侵权,请联系作者删除!