5

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

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

更一般地考虑这一点:是否有一个常见 java 类的列表说明它们是否是线程安全的?

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

4

3 回答 3

6

Java 中没有明确的线程安全类列表。只有Oracle 1可以提供最终列表,但他们还没有这样做。


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

于 2013-06-04T11:31:18.750 回答
5

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

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

于 2013-06-04T10:49:27.327 回答
5

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

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

于 2013-06-04T11:49:23.117 回答