Bảo đảm an toàn cho thread là gì cho Guava's ImmutableList.Builder? Các javadocs không nói.Là chủ đề của ImmutableList.Builder có an toàn không?
Trả lời
Trong khi các lớp không thể thay đổi của ổi là chủ đề an toàn, người xây dựng của họ thì không. Đối với hầu hết các ứng dụng, chỉ có một luồng sẽ tương tác với bất kỳ cá thể Builder cụ thể nào.
Trong trường hợp không có an toàn luồng thường không cần phải được ghi lại, thì Javadoc có thể có ý nghĩa đối với các nhà xây dựng bộ sưu tập không thể thay thế. Mọi người có thể ngạc nhiên rằng ImmutableList là chủ đề an toàn trong khi ImmutableList.Builder thì không.
Nếu chủ đề an toàn không được đề cập trong javadocs, đừng giả sử nó!
Nghiêm trọng hơn, "không".
Tôi cũng thích javadocs của ImmutableList và bạn bè bao gồm một sự hiểu biết rõ ràng, có - nhận xét (vì vậy bạn sẽ không phải tự mình giả định), bởi vì "hiển nhiên" không phải lúc nào cũng như vậy. Mới hôm nọ tôi đang thảo luận về scala.List
, một danh sách bất biến, và một số vấn đề nổi bật có thể gây ra nếu trao đổi giữa các chủ đề không thích hợp (thông qua một cuộc đua dữ liệu), mà mọi người không nghĩ đến vì họ thấy từ "bất biến" , cộng với chúng tương đương "bất biến == thread-safe", vì vậy nó trả tiền để được ở bên an toàn ngay cả khi ghi lại các khía cạnh an toàn chủ đề "rõ ràng".
Đồng ý với @Dimitris Andreou: chắc chắn không đảm bảo an toàn chủ đề nếu không được ghi nhận như vậy. Khi bạn đi đến nỗ lực tạo ra một chủ đề lớp không tầm thường, bạn muốn người dùng biết điều đó.
Ngoài ra, tôi nghĩ trường hợp sử dụng phổ biến nhất đối với người xây dựng sẽ bị giới hạn theo chủ đề: ví dụ như biến cục bộ trong một số phương pháp. Nếu bạn cần nhiều chủ đề để xây dựng một Danh sách, thực sự là bất biến chưa?
Nếu bạn có nhiều chủ đề đưa vào danh sách, nhưng muốn chụp nhanh một lúc nào đó và nói "không còn thay đổi về sau, không thay đổi" thì tôi sẽ viết thứ gì đó lấy các phần tử từ các chủ đề đó và đóng băng nội dung vào một ImmutableList mới khi bạn biết nó đã sẵn sàng.
- 1. Chủ đề SecureRandom có an toàn không?
- 2. Chủ đề này có an toàn không?
- 3. Chủ đề NSPersistentStoreCoordinator có an toàn không?
- 4. Chủ đề MSMQ có an toàn không?
- 5. Trong SignalR là chủ đề Hub.Context có an toàn không?
- 6. Chủ đề DocumentBuilder.parse() có an toàn không?
- 7. Có phải Azure CloudTable là chủ đề an toàn không?
- 8. Chủ đề java.util.Hashtable có an toàn không?
- 9. Chủ đề libuv có an toàn không?
- 10. Các destructor có nên là chủ đề an toàn không?
- 11. NSTimer có phải là chủ đề an toàn không?
- 12. Chủ đề EPiServer có an toàn không?
- 13. Chủ đề console.writeline có an toàn không?
- 14. Chủ đề NSFileManager có an toàn không?
- 15. Có an toàn cho chủ đề của PHP không?
- 16. Chủ đề PrintWriter của socket Java có an toàn không?
- 17. Chủ đề DataContractSerilaizer của WCF có an toàn không?
- 18. Chủ đề của Win32 Registry có an toàn không?
- 19. Là int? chủ đề an toàn?
- 20. msdn: "An toàn chủ đề" là gì?
- 21. Chủ đề của bảng Guava có an toàn khi bản đồ sao lưu của nó là an toàn không?
- 22. An toàn chủ đề của SocketOutputStream
- 23. Về chủ đề an toàn của servlet
- 24. An toàn chủ đề của JTextArea.append
- 25. Đối tượng 'an toàn chủ đề' có nghĩa là gì?
- 26. Log4Net FileAppender không phải là chủ đề an toàn?
- 27. java.text.SimpleDateFormat không phải là chủ đề an toàn
- 28. Chủ đề an toàn chủ đề - tĩnh hay không?
- 29. Có an toàn để sử dụng các chức năng chủ đề 'Không an toàn' không?
- 30. Chủ đề an toàn có được putStrLn không?
Bạn có bằng chứng không? Bài viết "Bộ sưu tập không thể thay đổi" (https://github.com/google/guava/wiki/ImmutableCollectionsExplained) cho biết "Các đối tượng không thể thay đổi có thể được sử dụng bởi nhiều chủ đề" nhưng nó không rõ ràng nói "Bộ sưu tập không thể xóa được chủ đề an toàn" . Tôi vẫn chưa tin :-( – 30thh