Tôi có một Collections.synchronizedList của WeakReference, _components;Trong java, giá trị trả về trong khối đồng bộ có vẻ giống như kiểu xấu. Thật sự nó có ảnh hưởng sao?
tôi đã viết một cái gì đó như sau, mong các trình biên dịch để phàn nàn:
public boolean addComponent2(Component e) {
synchronized (_components) {
return _components.add(new WeakReference<Component>(e));
}
}
Nhưng trình biên dịch là hoàn toàn hài lòng. Lưu ý rằng List.add() trả về TRUE. Vì vậy, ok, bất kỳ lối ra từ một khối đồng bộ phát hành khóa, nhưng điều này không lạ? Nó giống như một "lỗ hổng" trong khối, tương tự như sử dụng trở lại trong một vòng lặp.
Bạn có hài lòng khi duy trì mã như thế này không?
Trong khi tôi thường trở về từ bên trong khối quá (trên thực tế, tôi không thấy mình sử dụng các khối đồng bộ nguyên thủy nữa nhiều anyway , nhưng vẫn còn) có thể có một số lợi ích trong việc này từ đầu. Nếu bạn chỉ có khối đồng bộ, và sau đó một số mã bổ sung phải được thêm vào nhưng mã đó không yêu cầu đồng bộ hóa, thì bạn đã có nó bị hỏng. Nếu nó không bị hỏng, các nhà phát triển tương lai vội vàng có thể chỉ cần thêm mã phụ bên trong khối đồng bộ vì nó dễ dàng hơn, điều này có thể buộc màn hình không cần thiết. Vì vậy, tôi vẫn sẽ trở lại hình thức bên trong, nhưng có một số lợi ích nhỏ cho tương lai. – corsiKa
@corsiKa: Chỉ có lợi cho tương lai * nếu * thay đổi đó là bắt buộc. Nếu nó không được yêu cầu, sau đó nó làm cho * đọc * mã mà khó hơn một chút trong toàn bộ thời gian, IMO. –