Java:从同步块启动新线程时会发生什么?

coc*_*two 6 java multithreading synchronization locking

这里的第一个问题:在Java中它是一个非常短暂但基本的东西,我不知道......

在下面的例子中,该run()方法是否以某种方式执行了somemethod()获取的锁?

public synchronized void somemethod() {
    Thread t = new Thread( new Runnable() {
       void run() {
           ...          <-- is a lock held here ?
       }
    }
    t.start();
    ... 
    (lengthy stuff performed here, keeping the lock held)
    ...
}
Run Code Online (Sandbox Code Playgroud)

Xr.*_*Xr. 11

否.run()从同步方面开始.它没有任何锁定.如果确实如此,您将遇到死锁或者违反规范,该规范声明在任何给定时间只有一个线程可以锁定对象.

如果run()somemethod()再次调用同一个对象,则必须等待somemethod()创建它的调用首先完成.


Eri*_*ler 5

不,只有原始线程具有锁定(因为实际上只有一个线程可以持有锁).