dav*_*k01 9 java concurrency multithreading deadlock synchronized
假设我正在synchronized
某个线程内执行一个代码块,并且在synchronized
块内我调用一个方法,该方法产生另一个线程来处理需要与第一个方法相同锁定的同步代码块.所以在伪Java代码中:
public void someMethod() {
synchronized(lock_obj) {
// a whole bunch of stuff...
// this is the last statement in the block
(new Thread(someOtherMethod())).start();
}
// some more code that doesn't require a lock
}
public void someOtherMethod() {
// some setup code that doesn't require a lock
// return the stuff we want to run in another thread
// that does require a lock
return new Runnable() {
@Override
public void run() {
synchronized(lock_obj) {
// some more code
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何理解该代码.我写的甚至是合法的吗?从语法上讲,我没有看到任何问题,但我不确定如何通过这样的代码推理.那么当我执行someOtherMethod()
以便Runnable
在返回语句运行之前创建一个在什么样的范围内的代码的实例?它是作为第一个同步块的一部分执行的吗?假设还有一些其他线程可能需要锁定lock_obj
.
这段代码没有错.在返回语句之前someOtherMethod()
,代码在synchronized块中运行someMethod()
.新线程启动后,它将阻塞方法synchronized
内的语句,run()
直到它获得锁定lock_obj
(最早,每当someMethod()
退出其synchronized块时).