黑马程序员技术交流社区

标题: 关于wait()和notify()的问题 [打印本页]

作者: 李月    时间: 2012-4-7 10:04
标题: 关于wait()和notify()的问题
摘录毕老师其中的一段代码
class Output implements Runnable
{
        private Res r;
        Output(Res r)
        {
               this.r=r;
        }
        public viod run()
        {
                 while(true)
                  {
                        synchronized(r)
                        {
                                 if(!r.flag)
                                      try{r.wait();}catch(Exception e){}
                                 System.out.println(r.name="...."+r.sex);
                                 r.flag=false;
                                 r.notify();
                        }
                  }
        }
}

请问r.wait()的r是Res r还是synchronized(r)的r.如果把synchronized(r)的r换成Output.class

wait()方法用什么来调用。

作者: 葛尧    时间: 2012-4-7 12:31
本帖最后由 葛尧 于 2012-4-7 12:33 编辑

应该说synchronized(r)的r和r.wait() 是Res r的
这个r引用的对象是从创建者那里通过构造方法接收来的
可以换成Output.class
就用Output.class.wait()
当然Input里面也只能用Output.class 了要不然就是两把锁了
要知道.class 也是一个对象
作者: adison    时间: 2012-4-7 12:36
r.wait()的r是synchronized(r)的r,因为wait()会导致当前线程等待,当前线程必须拥有此对象监视器,线程间方法应该是互相呼应的
一般有静态同步函数并且有两个锁以上才要用字节码文件作为对象传入锁中,如果真按你那样做,wait()应该用this来调用就行了
作者: pray    时间: 2014-4-26 03:53
让个读过后都下载在硬盘里详细研究欣赏的好帖  




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