黑马程序员技术交流社区

标题: 关于多线程的小练习 [打印本页]

作者: 王烽棋    时间: 2015-4-23 21:52
标题: 关于多线程的小练习
写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z。 打印顺序为12A34B56C78D„„5152Z。要求用线程间的通信。
  1. public class ThreadTest {

  2.         public static void main(String[] args) {
  3.                
  4.                 Flag flag = new Flag();
  5.                
  6.                 printNum printNum = new printNum(flag);
  7.                 printLet printLet = new printLet(flag);
  8.                
  9.                 Thread t1 = new Thread(printNum);
  10.                 Thread t2 = new Thread(printLet);
  11.                
  12.                 t1.start();
  13.                 t2.start();
  14.                
  15.         }
  16. }

  17. class Flag{
  18.         private boolean flag;
  19.         public void setTrue(){
  20.                 flag=true;
  21.         }
  22.         public void setFalse() {
  23.                 flag=false;
  24.         }
  25.         public boolean getFlag() {
  26.                 return flag;
  27.         }
  28. }
  29. class printNum implements Runnable{
  30.         private Flag f;
  31.         public printNum(Flag f) {
  32.                 super();
  33.                 this.f = f;
  34.         }
  35.         public void run() {
  36.                 synchronized (f) {
  37.                        
  38.                         for (int i = 1; i <= 52; i+=2) {
  39.                                
  40.                                 if(f.getFlag())
  41.                                         try{f.wait();}catch (InterruptedException e) {}
  42.                                
  43.                                 System.out.print(i+""+(i+1));
  44.                                
  45.                                 f.setTrue();
  46.                                
  47.                                 f.notify();
  48.                           }
  49.                 }
  50.         }
  51. }

  52. class printLet implements Runnable{
  53.         private Flag f;
  54.        
  55.         public printLet(Flag f) {
  56.                 super();
  57.                 this.f = f;
  58.         }

  59.         @Override
  60.         public void run() {
  61.                 synchronized (f) {
  62.                        
  63.                         for (int i = 0; i < 26; i++) {
  64.                                
  65.                                 if(!f.getFlag())
  66.                                         try{f.wait();}catch (InterruptedException e) {}
  67.                                
  68.                                 System.out.print((char)('A'+i));
  69.                                
  70.                                 f.setFalse();
  71.                                
  72.                                 f.notify();
  73.                         }
  74.                 }
  75.         }
  76. }
复制代码








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2