Tôi không chắc chắn đây có phải là cách chính xác để đồng bộ hóa ArrayList
của tôi không.Cách đúng để đồng bộ hóa ArrayList trong java
Tôi có một số ArrayList
in_queue
được chuyển từ hàm registerInQueue
.
ArrayList<Record> in_queue = null;
public void registerInQueue(ArrayList in_queue)
{
this.in_queue = in_queue;
}
Bây giờ tôi đang cố gắng đồng bộ hóa. Điều này có đồng bộ hóa đối tượng in_queue
của tôi một cách chính xác không?
List<Record> in_queue_list = Collections.synchronizedList(in_queue);
synchronized (in_queue_list) {
while (in_queue_list.size() > 0) {
in_queue_list.remove(0);
}
}
Bạn thực sự không thể nâng cấp danh sách được đồng bộ hóa vì bạn đang chuyển một tham chiếu, vì vậy bạn không thực sự sở hữu nó. Bất cứ điều gì đã cho bạn các tài liệu tham khảo vẫn có thể sửa đổi danh sách ban đầu nó thông qua bạn đồng thời. Bất kể bạn đồng bộ hóa gì, trừ khi nó được biết rõ ràng rằng danh sách sẽ được bảo vệ bởi khóa nội tại của nó. –
Tôi sẽ đặt một khối đồng bộ xung quanh bất kỳ thao tác nào trên hàng đợi. Cảm ơn! – bob