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

时间:2013-06-04 10:44:46

标签: java thread-safety java.lang.class

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

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

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

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

3 个答案:

答案 0 :(得分:6)

Java中没有明确的线程安全类列表。 可以生成权威列表的唯一人员是Oracle 1 ,他们还没有这样做。


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

答案 1 :(得分:5)

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

我从未听说过线程安全的JDK类的列表

答案 2 :(得分:5)

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

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