2013-06-04 28 views
5

Tôi đang cố gắng áp dụng các bài học từ việc đọc Java Concurrency Trong Thực tiễn liên quan đến việc khai báo các lớp mà tôi viết có an toàn thread hay chúng chứa trạng thái có thể thay đổi không đồng bộ. Tôi nghĩ đây là một ý tưởng tốt vì nó ghi lại ý định về cách sử dụng lớp.Có danh sách các lớp an toàn theo chủ đề trong Java không?

Hôm nay, tôi đã viết một lớp kết thúc tốt đẹp một thể hiện của java.lang.Class và java.net.URI. Tôi đã viết về javadoc rằng nó là thread-an toàn bất biến kể từ khi cả hai lĩnh vực đã được tuyên bố là tài liệu tham khảo cuối cùng. Tuy nhiên, tôi đã xem mã nguồn của URI và Class và không thấy bất kỳ tuyên bố nào cho dù chúng có an toàn không và có vẻ không rõ ràng ngay lập tức.

Suy nghĩ về điều này một cách tổng quát hơn: có danh sách các lớp java phổ biến cho biết chúng có an toàn hay không? Mặt khác, nó có thể không quan trọng cho dù các trường hợp là hoàn toàn an toàn thread vì cách lớp này đang được sử dụng, tôi sẽ đánh dấu nó là 'có lẽ thread-an toàn' cho bây giờ.

+0

Có một vài nổi tiếng lớp thread-an toàn, chẳng hạn như SimpleDateFormat ví dụ, nhưng tôi không nghĩ rằng có một đầy đủ, danh sách chính thức. Vì vậy, trừ khi một lớp học được ghi lại là an toàn hoặc bạn có thể chứng minh với sự tự tin rằng nó và sẽ * vẫn * an toàn trong tương lai gần, bạn có lẽ nên sai về mặt thận trọng ... – assylias

Trả lời

6

Không có danh sách dứt khoát về các lớp an toàn chủ đề trong Java. Những người duy nhất có số có thể sản xuất một danh sách dứt khoát sẽ là Oracle và họ chưa làm như vậy.


1 - Oracle là người giám hộ của cả hai thư viện lớp Java tài liệu tham khảo (bao gồm javadocs), khác tài liệu "chính thức" và .. kiểm tra việc tuân thủ bộ chính thức cho Java. Họ là những người sẽ nói liệu một lớp (hoặc tập hợp con của một lớp) có an toàn chỉ là an toàn theo chủ đề không, chỉ là theo thiết kế Không ai khác có thể làm cho calll đó với sự chắc chắn; tức là liệu một lớp học có an toàn thread trong bộ mã hóa chuẩn của Oracle cũng phải được an toàn luồng trong hệ thống codebase Harvest/Android hoặc codebase Classpath hay ...

5

Tất cả các lớp không thay đổi được giả định là an toàn chỉ. Đối với các lớp có thể thay đổi, thực hành phổ biến là nêu rõ ràng khi lớp là an toàn luồng; nếu không có gì được nêu, bạn không thể giả định an toàn luồng.

Tôi chưa từng nghe đến danh sách về các lớp JDK an toàn theo chủ đề.

+0

+1 được cảnh báo rằng trong khi một số lớp học được coi là chủ đề an toàn, điều này không có nghĩa là bạn có thể sử dụng chúng theo bất kỳ cách nào bạn muốn và vẫn là chủ đề an toàn. ví dụ. bạn không thể lặp qua Vector mà không khóa nó một cách rõ ràng. –

+0

Ngoài ra, bạn không thể chia sẻ chúng một cách an toàn trong cuộc đua dữ liệu. –

5

Tất cả các lớp java.lang (Theo Marko cho biết các lớp không thay đổi được giả định để được an toàn thread). Ngoài ra BigDecimal và BigInteger và nhiều hơn nữa. Thật không may là không có danh sách các lớp đó.

Nếu bạn cần một số bộ sưu tập thread-safe thử Google Ổi Immutable Collections (http://code.google.com/p/guava-libraries/wiki/GuavaExplained?tm=6)

Các vấn đề liên quan