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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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();
                }
        }
}

3 个回复

倒序浏览
看了老毕的视频,和老师的写法有点不一样。
想请教各位大神,为什么我这么写就无法达到交替打印输出的效果呢?
还是一大片相同的那种。
感觉是else那里出的问题,但又想不明白为什么不行。感觉挺严谨的啊,程序从哪里钻进去进行的重复打印呢?
回复 使用道具 举报
http://bbs.itheima.com/forum.php?mod=attachment&aid=ODQ1NzZ8NmZkNGQ3MTEwY2YzMzVjMWY4ODUwNTdkNGJkNjkzZjZ8MTczMTU2MDEzNQ%3D%3D&request=yes&_f=.png

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

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

这是老师关于等待唤醒那部分的写法。
回复 使用道具 举报
本帖最后由 boboyuwu 于 2015-8-16 20:32 编辑

你的源代码运行结果

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

11.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马