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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李月 中级黑马   /  2012-4-7 10:04  /  1350 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

摘录毕老师其中的一段代码
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()方法用什么来调用。

3 个回复

倒序浏览
本帖最后由 葛尧 于 2012-4-7 12:33 编辑

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