Ai đó có thể xin giải thích sự khác biệt giữa hai ví dụ này trong bối cảnh đối tượng khóa:đề đồng bộ và khóa
public void method1(){
synchronized(this){
....
}
}
Và
StringBuffer aStringBufferObject = new StringBuffer("A");
public void method2(){
synchronized(aStringBufferObject){
....
}
}
Tôi biết ví dụ đầu tiên sẽ có được một khóa trên this
thể hiện và lần thứ hai sẽ nhận được một khóa của cá thể aStringBufferObject. Nhưng tôi không thực sự hiểu những gì có hiệu lực hoặc sự khác biệt của hai là.
Ví dụ, trong ví dụ thứ hai, các chuỗi sẽ vẫn có thể thực thi mã bên trong khối được đồng bộ hóa vì khóa không liên quan đến cá thể 'this'?
Tôi biết rằng việc đồng bộ hóa một phương thức hoặc một khối mã ngăn nhiều luồng truy cập khối/phương pháp đó cùng một lúc nhưng mục đích của việc chỉ định đối tượng đó là gì và sự khác biệt trong cách đối tượng được chỉ định như trong các ví dụ trên?
Xem thêm [Phương pháp đồng bộ hóa và khóa luồng] (http://forums.oracle.com/forums/thread.jspa?threadID=2257647). –
Cũng có một cái nhìn ở đây: [Java Concurrency/Multithreading - Hướng dẫn] (http://www.vogella.de/articles/JavaConcurrency/article.html) –
@Andrew: ah, tôi mặc dù bạn đang đề cập đến một bài viết, nhưng xem ngay bây giờ là một bài đăng đa bài. –