【发布时间】:2011-10-12 01:11:12
【问题描述】:
有人可以在对象锁定的上下文中解释这两个示例之间的区别吗:
public void method1(){
synchronized(this){
....
}
}
还有
StringBuffer aStringBufferObject = new StringBuffer("A");
public void method2(){
synchronized(aStringBufferObject){
....
}
}
我知道第一个示例将获得this 实例的锁,第二个示例将获得aStringBufferObject 实例的锁。但我真的不明白两者的效果或区别是什么。
例如,在第二个例子中,线程是否仍然能够执行同步块内的代码,因为锁与'this'实例无关?
我知道同步方法或代码块可以防止多个线程同时访问该块/方法,但是指定要锁定的对象的目的是什么以及对象的方式有什么区别像上面的例子那样指定?
【问题讨论】:
-
@Andrew:啊,我虽然你指的是一篇文章,但现在看到它是一个多帖子。
-
@HFOE "..这是一个多帖子。" 确实。我因很久以前在另一个问题上提到这一点而受到惩罚(主要是因为输入它作为答案 - 然后拒绝删除答案),所以现在采取更“微妙”的方法。 ;)
-
@Andrew:请使用悬停而不是 HFOE 将评论指向我,因为@HFOE 不会将评论指向我的收件箱。有关更多信息,请查看:meta: how-do-comment-replies-work
标签: java multithreading scjp