Nếu tôi có 2 phương thức được đồng bộ hóa trong cùng một lớp, nhưng mỗi phương thức truy cập các biến khác nhau, 2 luồng có thể truy cập cùng lúc 2 phương thức đó không? Liệu khóa xảy ra trên đối tượng, hoặc nó có được cụ thể như các biến bên trong phương thức được đồng bộ hóa không?
Thí dụ:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
2 luồng có thể truy cập cùng một thể hiện của lớp X đang thực hiện x.addA(
) và x.addB()
cùng một lúc không?
synchronized (this)
khối xung quanh thân phương thức. Đối tượng "này" không bị khóa, thay vào đó, đối tượng "này" được sử dụng làm mutex và cơ thể được ngăn chặn thực thi đồng thời với các phần mã khác cũng được đồng bộ hóa trên "này". Nó không có tác dụng đối với các lĩnh vực / phương pháp khác của "cái này" không được đồng bộ hóa.