Tôi không thể đảm bảo rằng WebSocketClient
là chủ đề 100% an toàn, nhưng tôi có thể nói rằng nó có nghĩa là để được an toàn chủ đề, đến một mức độ nhất định.
Nhìn vào source code, chúng ta thấy rằng phương pháp riêng initializeClient
được đồng bộ:
private synchronized void initializeClient() throws IOException
và rằng phương pháp connect
đang sử dụng một Executor
:
// Execute the connection on the executor thread
executor.execute(promise);
Các tài liệu của lớp nói gì về an toàn chủ đề, nhưng cuộc gọi của phương thức initializeClient
được đồng bộ từ phương pháp connect
và việc sử dụng Executor
là rõ ràng sig ns rằng một số hình thức đa luồng được hỗ trợ.
== Chỉnh sửa ==
An toàn chủ đề thường chỉ được đảm bảo cho một số loại hoạt động nhất định. Ví dụ, nó có thể được đảm bảo chỉ cho các hoạt động đọc và không phải cho các hoạt động ghi. Đây là vai trò của tài liệu hướng dẫn để xác định các điều kiện an toàn của luồng. Nhận xét của Sergio Montoro là đúng, nếu một chủ đề sửa đổi đối tượng trong quá trình sử dụng nó bằng một luồng khác, những điều kỳ lạ có thể xảy ra. Trong trường hợp của WebSocketClient
an toàn chủ đề chắc chắn là ít nhất bị giới hạn đối với việc không sửa đổi của đối tượng bằng các chủ đề khác, hoặc để sửa đổi đồng bộ và phối hợp của trạng thái nội bộ WebSocketClient
.
Nguồn
2016-12-13 21:22:46
+1 WebSocketClient chắc chắn được viết thành chuỗi an toàn. Thực tế là _code đôi khi có thể chứa lỗi_ không có nghĩa rằng đây không phải là mã đa luồng. –