有人可以在对象锁定的上下文中解释这两个示例之间的区别:
public void method1(){
synchronized(this){
....
}
}
和
StringBuffer aStringBufferObject = new StringBuffer("A");
public void method2(){
synchronized(aStringBufferObject){
....
}
}
我知道第一个示例将获得this
实例上的锁,第二个示例将获得 aStringBufferObject 实例的锁。但我真的不明白两者的效果或区别是什么。
例如,在第二个示例中,线程是否仍然能够执行同步块中的代码,因为锁与“this”实例无关?
我知道同步方法或代码块可以防止多个线程同时访问该块/方法,但是指定要锁定的对象的目的是什么以及指定对象的方式有什么区别上面的例子?