Nếu tôi cần truy cập nguyên tử vào một trường int bên trong một đối tượng, có đủ để khai báo trường này là AtomicInteger hay tôi cần sử dụng AtomicIntegerFieldUpdater? (và tại sao?)java - Truy cập nguyên tử vào trường trong đối tượng
Trả lời
Sử dụng AtomicInteger
là đủ. Trình cập nhật nguyên tử được sử dụng với các trường volatile
; trường hợp sử dụng chính là cấu trúc dữ liệu có số lượng lớn trường yêu cầu truy cập nguyên tử; bạn sử dụng trình cập nhật trường để sử dụng các trường đó với ngữ nghĩa nguyên tử mà không cần tham chiếu AtomicInteger
cho từng trường.
Để biết cuộc thảo luận chi tiết, hãy xem this link.
Ngoài comment biziclop (xem link):
Are java primitive ints atomic by design or by accident?
Chỉ trong trường hợp bạn đã không đi qua đây rồi.
AtomicInteger
và bạn bè thường phải đủ và thường thích hợp hơn vì nó không liên quan đến phản ánh hoặc các tin tặc khác như vậy.
AtomicIntegerFieldUpdater
có thể hữu ích khi bạn có nhiều trường hợp cần cập nhật cùng một lúc, vì điều này làm giảm tổng số đối tượng. Nó đặc biệt hữu ích nếu các hoạt động khác hơn là đọc và viết thẳng là không thường xuyên. Ví dụ: AtomicReferenceFieldUpdater
được sử dụng trong java.nio
cho phương thức đính kèm, thường được đặt một lần (tiếp xúc dưới dạng bộ nhận và đặt) và đọc nhiều lần.
Xác định quyền truy cập nguyên tử. Trình tự hoạt động nào bạn muốn tạo ra nguyên tử? – biziclop
một số chủ đề sẽ được tăng/giảm trường. – lgp