黑马程序员技术交流社区

标题: 线程间通信,优化代码后不出结果了,哪里出错了 [打印本页]

作者: 小太阳大开心    时间: 2014-5-10 19:48
标题: 线程间通信,优化代码后不出结果了,哪里出错了
本帖最后由 小太阳大开心 于 2014-6-30 11:29 编辑

class Rec
{
        private String name;
        private String sex;
        private boolean flag;
        public   synchronized  void  set(String name,String sex)
        {
                if (flag)
                {
                        try
                        {
                                this.wait();
                        }
                        catch (Exception e)
                        {
                        }
                }
                this.name=name;
                this.sex=sex;
                flag=true;
                this.notify();
        }
        public  synchronized void out()
        {
                if (flag)
                {
                        try
                        {
                                this.wait();
                        }
                        catch (Exception e)
                        {
                        }
                }
                System.out.println(name+"......"+sex);
                flag=false;
                this.notify();
        }
}

class Input implements Runnable
{
        private Rec r;
        Input(Rec r)
        {
                this.r=r;
        }
        public void run()
        {
                int x=0;
                while (true)
                {
                        if (x==0)
                        {
                                r.set("baixue","man");
                        }
                        else
                                r.set("cxy","girl");
                        x=(x+1)%2;
                }
               
        }
}
class Output implements Runnable
{
        private Rec r;
        Output(Rec r)
        {
                this.r=r;
        }
        public void run()
        {
                while (true )
                {
                        r.out();
                }
        }
}
class InputOutputDemo2
{
        public static void main(String[] args)
        {
                Rec r=new Rec();
                new Thread (new Input(r)).start();
                new Thread( new Output(r)).start();
        }
}

作者: skill20    时间: 2014-5-10 19:57
  1. public   synchronized  void  set(String name,String sex)
  2.         {
  3.                 if (flag)
  4.                 {
  5.                         try
  6.                         {
  7.                                 this.wait();
  8.                         }
  9.                         catch (Exception e)
  10.                         {
  11.                         }
  12.                 }
  13.                 this.name=name;
  14.                 this.sex=sex;
  15.                 flag=true;
  16.                 this.notify();
  17.         }
  18.         public  synchronized void out()
  19.         {
  20.                 if (!flag)//这里要非一下。
  21.                 {
  22.                         try
  23.                         {
  24.                                 this.wait();
  25.                         }
  26.                         catch (Exception e)
  27.                         {
  28.                         }
  29.                 }
  30.                 System.out.println(name+"......"+sex);
  31.                 flag=false;
  32.                 this.notify();
  33.         }
复制代码

作者: 小太阳大开心    时间: 2014-5-10 21:10
skill20 发表于 2014-5-10 19:57

哦哦哦,是的,辛苦啦:handshake
作者: sheng6699    时间: 2014-5-11 11:14
楼主不知道看懂了吗。我对问题代码进行了注释。你可以看下。 步骤 。1~~5步

QQ截图20140511111212.png (117.23 KB, 下载次数: 65)

QQ截图20140511111212.png

作者: 小太阳大开心    时间: 2014-5-11 17:08
sheng6699 发表于 2014-5-11 11:14
楼主不知道看懂了吗。我对问题代码进行了注释。你可以看下。 步骤 。1~~5步
...

恩恩,好的呢,谢谢,辛苦了




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