A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package cn.copy;

  2. /*
  3. * 改造以下代码, 打印出如下形式:
  4. * A 1
  5. * A 2
  6. * A 3
  7. *
  8. * B 1
  9. * B 2
  10. * B 3
  11. *
  12. * A 1
  13. * A 2
  14. * A 3
  15. *
  16. * B 1
  17. * B 2
  18. * B 3
  19. *
  20. * A 1
  21. * A 2
  22. * A 3
  23. *
  24. * B 1
  25. * B 2
  26. * B 3
  27. */

  28. public class PrintTest {

  29.         public static void main(String[] args) {
  30.                 final Printer printer = new Printer();
  31.                
  32.                 new Thread(){
  33.                         public void run() {
  34.                                 for (int i = 0; i < 3; i++)
  35.                                         printer.print1();
  36.                         };
  37.                 }.start();
  38.                
  39.                 new Thread(){
  40.                         public void run() {
  41.                                 for (int i = 0; i < 3; i++)
  42.                                         printer.print2();
  43.                         };
  44.                 }.start();
  45.                
  46.                 new Thread(){
  47.                         public void run() {
  48.                                 for (int i = 0; i < 3; i++)
  49.                                         printer.print3();
  50.                         };
  51.                 }.start();
  52.                
  53.         }

  54. }

  55. class Printer {
  56.         private int turn = 3;                // 目前该轮到哪个方法了

  57.         public synchronized void print1() {
  58.                 if (turn != 3){ // 如果不该1, 等待
  59.                         try {
  60.                                 this.wait();
  61.                         } catch (InterruptedException e) {
  62.                                 // TODO Auto-generated catch block
  63.                                 e.printStackTrace();
  64.                         }
  65.                 }
  66.                 if (turn == 3){
  67.                         for (int i = 1; i <= 3; i++)
  68.                                 System.out.println("A " + i);
  69.                         System.out.println();
  70.                        
  71.                         turn = 1;// 1执行后该2
  72.                         this.notifyAll();// 唤醒

  73.                 }
  74.         }

  75.         public synchronized void print2() {
  76.                 if (turn != 1){// 如果不该2, 等待
  77.                         try {
  78.                                 this.wait();
  79.                         } catch (InterruptedException e) {
  80.                                 // TODO Auto-generated catch block
  81.                                 e.printStackTrace();
  82.                         }
  83.                 }
  84.                 if (turn == 1) {
  85.                         for (int i = 1; i <= 3; i++)
  86.                                 System.out.println("B " + i);
  87.                         System.out.println();
  88.                        
  89.                         turn = 2;// 2执行后该1
  90.                         this.notifyAll();// 唤醒
  91.                 }
  92.         }
  93.        
  94.         public synchronized void print3() {
  95.                 if (turn != 2){
  96.                         try {
  97.                                 this.wait();
  98.                         } catch (InterruptedException e) {
  99.                                 // TODO Auto-generated catch block
  100.                                 e.printStackTrace();
  101.                         }
  102.                 }
  103.                 if (turn == 2) {
  104.                         for (int i = 1; i <= 3; i++)
  105.                                 System.out.println("C " + i);
  106.                         System.out.println();
  107.                         turn = 3;
  108.                         this.notifyAll();
  109.                 }       
  110.                
  111.         }

  112. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

1 个回复

正序浏览
楼主出门来财,儿孙满堂!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马