Edit:
HRM. Khi tôi đọc nó về mặt kỹ thuật là không chính xác nhưng được chấp nhận trong thực tế với một số cảnh báo. Chỉ các trường cuối cùng có thể được khởi tạo một cách an toàn một lần và được truy cập trong nhiều luồng mà không cần đồng bộ hóa.
Chủ đề khởi tạo lười biếng có thể gặp phải sự cố đồng bộ hóa theo một số cách. Ví dụ, bạn có thể có các điều kiện chạy thi công khi tham chiếu của lớp đã được xuất mà không có chính lớp đó được khởi tạo đầy đủ.
Tôi nghĩ rằng điều đó phụ thuộc rất lớn vào việc bạn có trường gốc hay đối tượng hay không. Các trường nguyên thủy có thể được khởi tạo nhiều lần mà bạn không nhớ rằng nhiều luồng làm việc khởi tạo sẽ hoạt động tốt. Tuy nhiên HashMap
khởi tạo kiểu theo cách này có thể có vấn đề. Ngay cả các giá trị long
trên một số kiến trúc có thể lưu trữ các từ khác nhau trong nhiều thao tác để có thể xuất một nửa giá trị mặc dù tôi nghi ngờ rằng long
sẽ không bao giờ vượt qua một trang bộ nhớ.
Tôi nghĩ rằng nó phụ thuộc cao vào việc hoặc không phải là một ứng dụng có bất kỳ rào cản bộ nhớ - bất kỳ synchronized
khối hoặc truy cập vào volatile
lĩnh vực. Ma quỷ là chắc chắn trong các chi tiết ở đây và mã mà không khởi tạo lười biếng có thể làm việc tốt trên một kiến trúc với một bộ mã và không phải trong một mô hình chủ đề khác nhau hoặc với một ứng dụng đồng bộ hiếm khi.
Dưới đây là một mảnh tốt về lĩnh vực cuối cùng như một so sánh:
http://www.javamex.com/tutorials/synchronization_final.shtml
Tính đến Java 5, một sử dụng cụ thể của từ khóa cuối cùng là một vũ khí rất quan trọng và thường bị bỏ qua trong kho vũ khí đồng thời của bạn. Về cơ bản, cuối cùng có thể được sử dụng để đảm bảo rằng khi bạn xây dựng một đối tượng, một luồng khác truy cập đối tượng đó không thấy đối tượng đó ở trạng thái được xây dựng một phần, như có thể xảy ra khác.Điều này là do khi được sử dụng làm thuộc tính trên các biến của một đối tượng, cuối cùng có đặc điểm quan trọng sau đây như một phần của định nghĩa của nó:
Bây giờ, ngay cả khi trường được đánh dấu cuối cùng, nếu đó là một lớp, bạn có thể sửa đổi các trường trong vòng lớp học. Đây là vấn đề khác và bạn vẫn phải đồng bộ hóa vấn đề này.
đừng lo sợ đọc dễ bay hơi. khởi tạo lớp, tức là mã có thể sửa đổi là cách di động duy nhất để thực hiện điều đó với tính dễ bay hơi. Tuyên bố không chính xác khi đối mặt với kiến trúc CPU cho phép viết lại được sắp xếp lại.Ngày x86 và Sparc TSO dễ đọc là miễn phí, vì vậy không có điểm để chơi một hacker. – bestsss