Tôi biết rằng việc sử dụng synchronize
từ khóa trước một phương thức mang lại sự đồng bộ hóa cho đối tượng đó. Tức là 2 luồng chạy cùng một thể hiện của đối tượng sẽ được đồng bộ hóa.
Tuy nhiên, vì đồng bộ hóa ở cấp độ đối tượng, 2 luồng chạy các phiên bản khác nhau của đối tượng sẽ không được đồng bộ hóa. Nếu chúng ta có một biến static trong một lớp Java được gọi bởi phương thức này, chúng ta muốn nó được đồng bộ hóa giữa các thể hiện của lớp. Hai phiên bản đang chạy trong 2 luồng khác nhau.
Chúng ta có thể đạt được sự đồng bộ theo cách sau không?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
Có đúng là vì chúng ta đã xác định một đối tượng lock
là static và chúng ta đang sử dụng từ khóa synchronized
cho khóa đó, biến static count
hiện được đồng bộ hóa giữa các thể hiện của lớp Test
không?