编程题:多线程交替打印ABC

x33g5p2x  于2022-08-17 转载在 其他  
字(0.8k)|赞(0)|评价(0)|浏览(487)

要求创建3个线程,分别打印ABC,共交替打印10次。

  1. public class Main {
  2. // 以A开始的信号量,初始信号量数量为1
  3. private static Semaphore A = new Semaphore(1);
  4. // B、C信号量,A完成后开始,初始信号数量为0
  5. private static Semaphore B = new Semaphore(0);
  6. private static Semaphore C = new Semaphore(0);
  7. public static void main(String[] args) {
  8. new Thread(() -> {
  9. try {
  10. for (int i = 0; i < 10; i++) {
  11. // A获取信号执行,A信号量减1,当A为0时将无法继续获得该信号量
  12. A.acquire();
  13. System.out.print("A");
  14. // B释放信号,B信号量加1(初始为0),此时可以获取B信号量
  15. B.release();
  16. }
  17. } catch (InterruptedException e) {
  18. e.printStackTrace();
  19. }
  20. }).start();
  21. new Thread(() -> {
  22. try {
  23. for (int i = 0; i < 10; i++) {
  24. B.acquire();
  25. System.out.print("B");
  26. C.release();
  27. }
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. }).start();
  32. new Thread(() -> {
  33. try {
  34. for (int i = 0; i < 10; i++) {
  35. C.acquire();
  36. System.out.print("C");
  37. A.release();
  38. }
  39. } catch (InterruptedException e) {
  40. e.printStackTrace();
  41. }
  42. }).start();
  43. }
  44. }

控制台输出:

  1. ABCABCABCABCABCABCABCABCABCABC

相关文章