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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tanshion 中级黑马   /  2014-6-13 10:26  /  793 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 tanshion 于 2014-6-13 11:25 编辑

如果一个可被多个线程访问的资源类的某一个synchronized方法里有wait(),当这个wait()被调用时,是让当前进入到synchronized方法的这个线程进入wait,还是这个资源类进入wait?如果是线程进入wait,那为什么不是在线程类上调用wait()而是在资源类里调用(这里的wait()实际上应该是this.wait())?

如果资源类里是这样的
public synchronized void f(){
    while(condition){
        wait();
    }
    System.out.println("f() return;")
}
那是不是运行到这个循环的时候,进入wait、等待notify并释放锁,但是这个方法并没有返回(控制台没输出)?

3 个回复

倒序浏览
当执行wait(),此线程就暂停了,程序去执行别的线程去了,这个方法并没有执行完
回复 使用道具 举报
执行wait,肯定是此线程暂停,其后的方法还没有执行,下一步就会去执行其他的线程,当其他线程执行完,就会返回继续执行,和楼上意思一样。
回复 使用道具 举报
void wait()  在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
void notify()  唤醒在此对象监视器上等待的单个线程。

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