停放 JAVA 线程是否会导致任何获取的监视器被释放

Sto*_*dow 5 java concurrency multithreading deadlock java.util.concurrent

当通过停放线程来暂停线程执行时,是否会导致线程放弃任何获取的对象监视器的所有权?

简而言之,如果一个线程 (t1) 获取“this”对象的监视器并被停放,而另一个线程 (t2) 通过首先尝试获取“this”的监视器并阻塞来尝试取消停放 t1,则以下代码是否会死锁。

// Thread t1 executes this code first.
syncronized(this) {
    LockSupport.park();
}

// Thread t2 then executes this piece of code.
synchronized(this) {
    LockSupport.unpark(t1);
}
Run Code Online (Sandbox Code Playgroud)

Pav*_*kyy 4

会出现死锁,因为当尝试获取相同的锁时,对象t1被阻塞并且仍然拥有该对象的锁。thist2