2017-04-13 26 views
1

如果我有这样的事情线程在阻塞后是否退出每个同步的方法或对象?

synchronized void doSomething() throws Exception { 
    synchronized (lock1) { 
     lock1.wait(); 
    } 
    wait(); 
} 

一旦块在lock1.wait(),将一些其他线程能够访问doSomething()做工作呢?

如果被阻塞的线程获得信号并重新获得进入方法会怎么样?它会阻止wait()还是不?

+0

请注意,这不会考虑到虚假唤醒可能发生。请参阅https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-- – Fildor

回答

1

不,调用wait()只会释放您要调用wait()的对象的锁定。在示例代码中,lock1上的锁将被释放,但this上的锁仍然由线程保留。

相关问题