Java中是否有一个线程安全类列表?

Mat*_*att 5 java thread-safety java.lang.class

我正在尝试应用阅读Java Concurrency In Practice中的经验教训,以声明我编写的类是线程安全的还是包含非同步的可变状态.我认为这是一个好主意,因为它记录了如何使用类的意图.

今天,我编写了一个包装java.lang.Class和java.net.URI实例的类.我正准备在javadoc中写入它是线程安全不可变的,因为这两个字段都被声明为最终引用.但是,我查看了URI和Class的源代码,并没有看到它们是否是线程安全的任何声明,并且它似乎并不是很明显.

更普遍地考虑这个问题:是否有一个常见的java类列表,说明它们是否是线程安全的?

另一方面,由于这个类的使用方式,实例是否严格是线程安全的并不重要,我现在将它标记为"可能是线程安全的".

Ste*_*n C 6

Java中没有明确的线程安全类列表.唯一可以产生确定列表的人就是Oracle 1,他们还没有这样做.


1 - Oracle是参考Java类库(包括javadocs),其他"官方"文档和Java官方合规性测试套件的保管人.他们会说一个线程安全的类(或类的子集)是否是设计线程安全,或者它是否仅仅是一个实现工件.没有其他人可以完全确定地完成那个游戏; 即,在标准Oracle代码库中是否是线程安全的类在Harvest/Android代码库或Classpath代码库中是否也应该是线程安全的,或者......


Mar*_*nik 5

假定所有不可变类都是线程安全的.对于可变类,通常的做法是在类是线程安全时明确说明; 如果没有说明,你不能假设线程安全.

但是我从来没有听说过一个线程安全的JDK类列表.


小智 5

所有java.lang类(如Marko所说,不可变类被认为是线程安全的).还有BigDecimal和BigInteger等等.不幸的是,没有该类的列表.

如果您需要一些线程安全的集合,请尝试使用Google Guava不可变集合(http://code.google.com/p/guava-libraries/wiki/GuavaExplained?tm=6)