假设我正在执行一个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
}
}
};
}
我不知道如何理解该代码。我写的东西合法吗?从语法上讲,我没有看到任何问题,但我不确定如何通过这样的代码进行推理。所以当我执行someOtherMethod()
为了创建一个实例Runnable
return 语句之前的代码在什么范围内运行?它是否作为第一个同步块的一部分执行?假设还有一些其他线程也在工作,可能需要锁定lock_obj
.
在创建可运行对象和线程期间,您仍然持有锁,但是在调用 start 之后和线程实际获取之前,您将放弃锁。新线程将不得不与其他线程竞争锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)