我需要澄清一些关于块级同步的要点。
假设下面的同步块是类的同一个方法()中的:
class A{
some_method(){
//BLOCK1
synchronized(OBJ1){
shared code...
}
//BLOCK2
synchronized(OBJ1){
shared code...
}
//BLOCK3
synchronized(OBJ2){
shared code...
}
}
}以下查询:
1)如果一个线程通过获取OBJ1上的锁进入OBJ1,那么只要第一个线程持有OBJ1上的锁,其他线程就不能进入OBJ1,而其他线程可以同时运行block3,这是正确的吗?
(2)如果在完成OBJ1后进入block2,那么第一个线程是否需要再次获得block1上的锁?
3)如果第一个线程在block2中调用了一些代码,那么在第一个块执行期间,它是否必须释放OBJ1获取的锁,然后再次获得它,或者在第一个块期间获得相同的锁就可以了吗?
现在假设block1在一个类的方法中,blockk2在一个类的方法中,而3在另一个类的方法中,
4)与第1点一样,同步是通过获取某个第三方obj (OBJ1,OBJ2)上的锁来实现的。
发布于 2012-05-19 11:00:41
发布于 2012-05-19 11:02:40
1)是的,如果一个线程持有OBJ1锁,那么其他线程都不能获得相同的锁
( 2)是的,需要再次获得锁,因为它将在第1块末尾释放
3)不,线程不会阻塞它已经持有的锁
4)是
发布于 2012-05-19 11:13:44
1)是
2)是的,因为它在BLOCK1之外。
3)与本锁相同,用于嵌套锁定的锁保持(即已经获得)。
现在假设memory.中的
是一个类的方法,而blockk2和3则是其他类Ans的方法:只要锁对象是同一个对象,结果就不会不同。
4)是
https://stackoverflow.com/questions/10664534
复制相似问题