Nói rằng tôi có đoạn mã sau:Khóa thực tế có quan trọng khi quyết định sử dụng dễ bay hơi không?
private Integer number;
private final Object numberLock = new Object();
public int get(){
synchronized(number or numberLock){
return Integer.valueOf(number);
}
}
Câu hỏi của tôi là, làm các phiên bản sau của phương pháp add
cần phải có number
như biến động trong các trường hợp dưới đây:
public void add(int num){
synchronized(number)
number = number + num;
}
public void add(int num){
synchronized(numberLock)
number = number + num;
}
Tôi hiểu rằng đây là cả hai hoạt động nguyên tử, nhưng câu hỏi của tôi là, là giá trị của number
guarennteed để được đẩy ra ngoài bộ nhớ toàn cầu và hiển thị cho tất cả các chủ đề mà không sử dụng dễ bay hơi?
Đồng bộ hóa trên số có thể không phải là một ý tưởng hay, các đối tượng số nguyên (có thể) được lưu vào bộ nhớ cache và vì vậy điều này sẽ chặn mã khác đồng bộ hóa trên cùng một số. – Jim
@Jim đúng, chỉ là cố gắng để làm cho một ví dụ đơn giản:) – Shawn