黑马程序员技术交流社区

标题: 关于多线程的一个问题,想了很久。 [打印本页]

作者: muffin    时间: 2015-8-16 17:24
标题: 关于多线程的一个问题,想了很久。
class  WaitAndNotify2
{
        public static void main(String[] args)
        {
                Resource a=new Resource();
                Input in=new Input(a);
                Output ou=new Output(a);
                new Thread(in).start();
                new Thread(ou).start();
        }
}
class Resource
{
        private String name;
        private String sex;
        private boolean flag;
        public synchronized void setResource(String name,String sex)
        {
                if (flag==false)
                {
                        this.name=name;
                        this.sex=sex;
                        flag=true;
                        this.notify();
                }
                else
                {
                        try{this.wait();}catch(Exception e){}
                }
        }
        public synchronized void outResource()
        {
                if(flag==true)
                {
                        System.out.println(name+"   "+sex);
                        flag=false;
                        this.notify();
                }
                else
                {
                        try{this.wait();}catch(Exception e){}
                }
        }
}
class Input implements Runnable
{
        private Resource r;
        private int x;
        Input(Resource r)
        {
                this.r=r;
        }
        public void run()
        {
                while (true)
                {
                        if (x==0)
                                r.setResource("zhangsan","nan");
                        else
                                r.setResource("lisi","nv");
                        x=(x+1)%2;
                }
        }
}
class Output implements Runnable
{
        private Resource r;
        Output(Resource r)
        {
                this.r=r;
        }
        public void run()
        {
                while (true)
                {
                        r.outResource();
                }
        }
}
作者: muffin    时间: 2015-8-16 17:28
看了老毕的视频,和老师的写法有点不一样。
想请教各位大神,为什么我这么写就无法达到交替打印输出的效果呢?
还是一大片相同的那种。
感觉是else那里出的问题,但又想不明白为什么不行。感觉挺严谨的啊,程序从哪里钻进去进行的重复打印呢?
作者: muffin    时间: 2015-8-16 17:34
http://bbs.itheima.com/forum.php?mod=attachment&aid=ODQ1NzZ8MTlhNWIyYWE2MmUwOTA2ZjZiODkzODc2YzZmOWFkMzN8MTczMTYwMzcyOA%3D%3D&request=yes&_f=.png

(GHS[FVBF{TI4943DBHYMLB.png (72.23 KB, 下载次数: 8)

这是老师关于等待唤醒那部分的写法。

这是老师关于等待唤醒那部分的写法。

作者: boboyuwu    时间: 2015-8-16 20:28
本帖最后由 boboyuwu 于 2015-8-16 20:32 编辑

你的源代码运行结果

11.png (62.64 KB, 下载次数: 9)

11.png





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