是否有人可以解釋的對象鎖定的情況下這兩個例子之間的區別:同步線程和鎖定
public void method1(){
synchronized(this){
....
}
}
而且
StringBuffer aStringBufferObject = new StringBuffer("A");
public void method2(){
synchronized(aStringBufferObject){
....
}
}
我所知道的第一個例子將獲取的鎖this
實例,第二個將獲得aStringBufferObject實例的鎖定。但我真的不明白兩者的效果或差異。
例如,在第二個例子中,線程是否仍然能夠執行synchronized塊中的代碼,因爲鎖與'this'實例無關?
我知道同步一個方法或一段代碼可以防止多個線程同時訪問該塊/方法,但指定要鎖定的對象的目的是什麼以及對象的方式有什麼區別是在上面的例子中指定的?
另請參見[同步方法和線程鎖定](http://forums.oracle.com/forums/thread.jspa?threadID=2257647)。 –
也看看這裏:[Java併發/多線程 - 教程](http://www.vogella.de/articles/JavaConcurrency/article.html) –
@Andrew:啊,我雖然你指的是一篇文章,但現在看看它是一個多文章。 –