黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: 学习代码    时间: 2014-3-16 10:12
标题: 多线程问题
  1. class Demo1
  2. {
  3.         String name;
  4.         String sex;
  5.         boolean flag=false;
  6. }
  7. class Input implements Runnable
  8. {
  9.         private Demo1 e;
  10.         Input(Demo1 e)
  11.         {
  12.                 this.e=e;
  13.         }
  14.         public void run()
  15.         {        int a=0;
  16.                 while(true)
  17.                 {        synchronized(e)
  18.                         {       
  19.                                 if(e.flag)
  20.                                 {        try{e.wait();}catch(Exception e){}
  21.                                         if(a==0)
  22.                                         {
  23.                                                 e.name="zhangsan";
  24.                                                 e.sex="man";
  25.                                         }
  26.                                         else
  27.                                         {
  28.                                                 e.name="丽丽";
  29.                                                 e.sex="女女女女女";
  30.                                         }
  31.                                         a = (a+1)%2;
  32.                                         e.flag=true;
  33.                                         e.notify();
  34.                         }
  35.                 }
  36.                
  37.         }
  38. }

  39. }
  40. class Output implements Runnable
  41. {
  42.         private Demo1 e;
  43.         Output(Demo1 e)
  44.         {
  45.                 this.e=e;
  46.         }
  47.         public void run()
  48.         {
  49.                 while(true)
  50.                 {        synchronized(e)
  51.                         {        if(!e.+flag)
  52.                                 {        try{e.wait();}catch(Exception e){}
  53.                                         System.out.println(e.name+";;;;"+e.sex);
  54.                                         e.flag=false;
  55.                                         e.notify();
  56.                                 }
  57.                         }
  58.                 }
  59.         }
  60. }
  61. class Demo
  62. {
  63.         public static void main(String[] args)
  64.         {
  65.                 Demo1 e = new Demo1();
  66.                 Input in = new Input(e);
  67.                 Output out = new Output(e);
  68.                 Thread t = new Thread(in);
  69.                 Thread t1 = new Thread(out);
  70.                 t.start();
  71.                 t1.start();
  72.         }
  73. }
复制代码

作者: 梦里花-静    时间: 2014-3-16 10:27
:L什么问题啊 请指明
作者: 学习代码    时间: 2014-3-16 10:47
梦里花-静 发表于 2014-3-16 10:27
什么问题啊 请指明

头都被弄乱了  问题都没写 实在抱歉   我就是想问一下 为什么  不出结果呢  
作者: 梦里花-静    时间: 2014-3-16 11:19
  1. class Demo1
  2. {
  3.         String name;
  4.         String sex;
  5.         boolean flag=false;
  6. }
  7. class Input implements Runnable
  8. {
  9.         private Demo1 e;
  10.         Input(Demo1 e)
  11.         {
  12.                 this.e=e;
  13.         }
  14.         public void run()
  15.         {        int a=0;
  16.                 while(true)
  17.                 {        synchronized(e)
  18.                         {        
  19.                                 if(e.flag)
  20.                                         try{e.wait();}catch(Exception e){}
  21.                                         if(a==0)
  22.                                         {
  23.                                                 e.name="zhangsan";
  24.                                                 e.sex="man";
  25.                                         }
  26.                                         else
  27.                                         {
  28.                                                 e.name="丽丽";
  29.                                                 e.sex="女女女女女";
  30.                                         }
  31.                                         a = (a+1)%2;
  32.                                         e.flag=true;
  33.                                         e.notify();
  34.                         
  35.                 }
  36.                
  37.         }
  38. }

  39. }
  40. class Output implements Runnable
  41. {
  42.         private Demo1 e;
  43.         Output(Demo1 e)
  44.         {
  45.                 this.e=e;
  46.         }
  47.         public void run()
  48.         {
  49.                 while(true)
  50.                 {        synchronized(e)
  51.                         {        if(!e.flag)
  52.                                         try{e.wait();}catch(Exception e){}
  53.                                         System.out.println(e.name+";;;;"+e.sex);
  54.                                         e.flag=false;
  55.                                         e.notify();
  56.                                 
  57.                         }
  58.                 }
  59.         }
  60. }
  61. class Demo
  62. {
  63.         public static void main(String[] args)
  64.         {
  65.                 Demo1 e = new Demo1();
  66.                 Input in = new Input(e);
  67.                 Output out = new Output(e);
  68.                 Thread t = new Thread(in);
  69.                 Thread t1 = new Thread(out);
  70.                 t.start();
  71.                 t1.start();
  72.         }
  73. }
复制代码

仔细看一下代码。
作者: 学习代码    时间: 2014-3-16 11:39
梦里花-静 发表于 2014-3-16 11:19
仔细看一下代码。

好的 谢谢  问题找到了  
作者: 郝大龙0104    时间: 2014-3-16 11:55
52行   多了个加号   20  34  53  57  把那个大括号去掉   

你编程出现的问题是    if(e.flag)  if(!e.flag)  判断的范围不确定     这两个if主要是判断范围  只有 wait()方法  你的范围太大啦。。   你再看看毕老师的视频
作者: 一年_Hei    时间: 2014-3-16 12:11
多了一个输出里判断标记多了+




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