黑马程序员技术交流社区

标题: java里多线程的wait问题 [打印本页]

作者: tanshion    时间: 2014-6-13 10:26
标题: java里多线程的wait问题
本帖最后由 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并释放锁,但是这个方法并没有返回(控制台没输出)?
作者: 友来友网    时间: 2014-6-13 10:37
当执行wait(),此线程就暂停了,程序去执行别的线程去了,这个方法并没有执行完
作者: Jack_Chen    时间: 2014-6-13 11:05
执行wait,肯定是此线程暂停,其后的方法还没有执行,下一步就会去执行其他的线程,当其他线程执行完,就会返回继续执行,和楼上意思一样。
作者: kongyan4696    时间: 2014-6-13 11:50
void wait()  在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
void notify()  唤醒在此对象监视器上等待的单个线程。






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