我需要澄清有关块级同步的一些要点。
假设以下同步块位于类的同一方法中:
class A{
some_method(){
//BLOCK1
synchronized(OBJ1){
shared code...
}
//BLOCK2
synchronized(OBJ1){
shared code...
}
//BLOCK3
synchronized(OBJ2){
shared code...
}
}
}
以下查询:
1)如果一个线程通过获取OBJ1的锁进入block1,那么只要第一个线程持有OBJ1的锁,其他线程就不能进入Block2,但其他线程可以同时运行block3,这对吗?
2)第一个线程在完成block1后进入block2是否需要再次获取OBJ1的锁?
3)如果第一个线程从block1调用block2中的一些代码,那么它是否必须释放在第一个块执行期间获得的OBJ1上的锁并再次获得它或者在第一个块期间获得相同的锁会起作用?
现在假设 block1 在一个类的方法中,而 blockk2 和 3 在另一个类的方法中
4) 与第 1 点相同,因为同步是通过获取某个第三类 obj (OBJ1,OBJ2) 的锁定而发生的?