Theo nhiều, thành ngữ Khóa đôi được kiểm tra đôi chút bị hỏng cho java trừ khi bạn đang chạy 1.5 hoặc mới hơn và sử dụng từ khóa volatile
.Khóa đã kiểm tra đôi trong Android
Một chia đôi kiểm tra mẫu khóa:
// Broken multithreaded version
// "Double-Checked Locking" idiom
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null)
synchronized(this) {
if (helper == null)
helper = new Helper();
}
return helper;
}
// other functions and members...
}
Mẫu xuất phát từ bài viết này, mà còn cung cấp thêm chi tiết về làm thế nào để sửa chữa nó: phân tích http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
Pugh của trên là dành cho Java VM. Tôi làm việc trên Android và thường xuyên sử dụng các thư viện sử dụng Khóa đôi được kiểm tra. Mô hình bộ nhớ của máy ảo dalvik có hỗ trợ thành ngữ này không?
Bạn có thể đoán tại đó tôi đang xem;) – Snicolas