Bạn thực sự cần phân loại loại Vector an toàn chủ đề của Java. Javas Vector là an toàn để được sử dụng từ nhiều chủ đề bởi vì nó sử dụng đồng bộ hóa trên các phương pháp. Nhà nước sẽ không bị hỏng.
Tuy nhiên, tính hữu dụng của vectơ Java bị giới hạn từ nhiều chuỗi mà không cần đồng bộ hóa bổ sung. Ví dụ: xem xét hành vi đọc đơn giản một phần tử từ một vector
Vector vector = getVector();
if (vector.size() > 0) {
object first = vector.get(0);
}
Phương pháp này sẽ không làm hỏng trạng thái của vectơ, nhưng cũng không đúng. Không có gì ngăn chặn một luồng khác từ việc đột biến vectơ ở giữa câu lệnh if một lời gọi get(). Mã này có thể và sẽ cuối cùng không thành công do điều kiện chủng tộc.
Loại đồng bộ hóa này chỉ hữu ích trong một loạt các trường hợp và nó chắc chắn không rẻ. Bạn trả một mức giá đáng chú ý để đồng bộ hóa ngay cả khi bạn không sử dụng nhiều luồng.
. Net đã chọn không trả giá này theo mặc định cho một trường hợp chỉ có tính hữu ích hạn chế. Thay vào đó, nó đã chọn để thực hiện một danh sách khóa miễn phí. Tác giả chịu trách nhiệm thêm bất kỳ đồng bộ hóa nào. Nó gần gũi hơn với mô hình của C++ là "chỉ trả tiền cho những gì bạn sử dụng"
Gần đây tôi đã viết một vài bài viết về sự nguy hiểm của việc sử dụng các bộ sưu tập chỉ với đồng bộ nội bộ như vector của Java.
Reference Vector chủ đề an toàn: http://www.ibm.com/developerworks/java/library/j-jtp09263.html
Theo MSDN [ArrayList] (http://msdn.microsoft.com/en-us/library/system.collections. arraylist.aspx # threadSafetyToggle) và [List (Of T)] (http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx#threadSafetyToggle) có cùng một luồng an toàn. 'ArrayList' không cung cấp trình bao bọc [Synchronized] (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.synchronized.aspx). –