Đây là Java 1.6 lớp học của tôi:"Đồng bộ hóa không nhất quán" có nghĩa là gì?
public class Foo {
private ArrayList<String> names;
public void scan() {
if (names == null) {
synchronized (this) {
this.names = new ArrayList<String>();
// fill the array with data
}
}
}
}
FindBugs nói:
Inconsistent synchronization of com.XXX.Foo.names; locked 40% of time
có nghĩa là gì và những gì tôi đang làm sai? Tôi đang cố gắng tránh các vấn đề khi hai hoặc nhiều khách hàng gọi Foo.scan()
cùng một lúc.
Nếu bạn dự định sử dụng thành ngữ này, biến tên phải được đánh dấu dễ bay hơi. –
Bạn cũng nên kiểm tra xem nếu 'tên' là null trước khi bạn nhập khối sychrnoize. Điều này tránh khóa khi không cần thiết. – Jeremy
@Phil M tại sao tên nên được đánh dấu dễ bay hơi? Tôi nghĩ rằng synchonized cung cấp khả năng hiển thị tương tự như dễ bay hơi. Vì vậy, bạn sẽ không thêm bất cứ điều gì miễn là tất cả các truy cập vào tên sử dụng cùng một khóa. – brain