All,CopyOnWriteArray hoặc Vector
Cạnh Vector lớp có hơn ArrayList là nó được đồng bộ hóa và do đó đảm bảo thread-an toàn. Tuy nhiên, giữa CopyOnWriteArray và Vector, những gì nên được ưu tiên xem xét an toàn chủ đề và hiệu suất trong xem xét.
All,CopyOnWriteArray hoặc Vector
Cạnh Vector lớp có hơn ArrayList là nó được đồng bộ hóa và do đó đảm bảo thread-an toàn. Tuy nhiên, giữa CopyOnWriteArray và Vector, những gì nên được ưu tiên xem xét an toàn chủ đề và hiệu suất trong xem xét.
Nhìn chung, nó phụ thuộc vào tần suất và tính chất của hoạt động đọc và ghi và kích thước của mảng.
Bạn sẽ cần phải chuẩn trong ngữ cảnh của bạn để chắc chắn, nhưng đây là một số nguyên tắc chung:
Bạn cũng có thể muốn xem xét hai lựa chọn khác:
Tùy thuộc vào mẫu sử dụng - nếu bạn có nhiều lần đọc hơn viết, hãy sử dụng CopyOnWriteArrayList
, nếu không hãy sử dụng Vector
.
Vector
giới thiệu độ trễ đồng bộ hóa nhỏ cho mỗi thao tác, khi CopyOnWriteArrayList
có thời gian chờ ghi lâu hơn (do sao chép) nhưng không bị trì hoãn cho lần đọc.
Một xem xét khác là hành vi của trình lặp - Vector
yêu cầu đồng bộ hóa rõ ràng khi bạn đang lặp lại nó (vì vậy không thể thực hiện thao tác ghi cùng một lúc), CopyOnWriteArrayList
thì không.
Ngoài ra, hãy xem xét sử dụng Collections.synchronizedList để bọc Danh sách không an toàn, thay vì thực hiện đồng bộ hóa bên ngoài – barjak
"sử dụng khóa riêng biệt, cao hơn ... ** hiệu quả hơn ** có đồng bộ hóa trên mọi hoạt động đơn lẻ "-> Thuận tiện có thể, nhưng hiệu quả? Tôi nghĩ rằng một khóa cấp cao hơn là hoàn toàn trái ngược với hiệu quả. – Kashyap
"sử dụng khóa riêng biệt, cấp cao hơn ... Điều này hiệu quả hơn ** ** so với việc đồng bộ hóa trên mọi thao tác đơn lẻ" -> Thuận tiện có thể, nhưng hiệu quả? Tôi nghĩ rằng một khóa cấp cao hơn là hoàn toàn trái ngược với hiệu quả. – Kashyap