首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >块级同步

块级同步
EN

Stack Overflow用户
提问于 2012-05-19 10:52:01
回答 3查看 218关注 0票数 0

我需要澄清一些关于块级同步的要点。

假设下面的同步块是类的同一个方法()中的:

代码语言:javascript
复制
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)上的锁来实现的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-19 11:00:41

  1. 是的,是的。
  2. 是的,因为块在OBJ1
  3. 上是同步的,我不明白你的意思。如果你想问的是“锁是可重入的吗?”,那么是的。已经对对象具有锁的线程可以在同一对象上输入同步的另一个块。
  4. 是的。代码在哪里并不重要。重要的是线程是否有锁。
票数 0
EN

Stack Overflow用户

发布于 2012-05-19 11:02:40

1)是的,如果一个线程持有OBJ1锁,那么其他线程都不能获得相同的锁

( 2)是的,需要再次获得锁,因为它将在第1块末尾释放

3)不,线程不会阻塞它已经持有的锁

4)是

票数 0
EN

Stack Overflow用户

发布于 2012-05-19 11:13:44

1)是

2)是的,因为它在BLOCK1之外。

3)与本锁相同,用于嵌套锁定的锁保持(即已经获得)。

现在假设memory.中的

是一个类的方法,而blockk2和3则是其他类Ans的方法:只要锁对象是同一个对象,结果就不会不同。

4)是

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10664534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档