2011-07-12 9 views
5

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

+0

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

+0

một số chủ đề sẽ được tăng/giảm trường. – lgp

Trả lời

6

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.

1

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.