![]() |
1
31
虽然guava不可变类是threadsafe,但它们的构建者不是。对于大多数应用程序,只有一个线程将与任何特定的生成器实例交互。 虽然通常不需要记录线程安全性的缺失,但是对于不变的集合构建者来说,这样的javadoc可能是有意义的。人们可能会惊讶于不可变列表是线程安全的,而不可变列表是线程安全的。 |
![]() |
2
13
如果javadocs中没有提到线程安全性,那么不要假设它! 更严重的是,“不”。
我也更喜欢不可变列表的javadocs,朋友们也包括这样一个非常明显的,是的评论(这样你就不必自己假设了),因为“明显”并不总是如此。就在前几天我在讨论
|
![]() |
3
2
同意@dimitris andreou:如果没有这样的记录,绝对不要假设线程安全。当你努力做一个非平凡的类线程安全时,你 希望 用户了解它。 除此之外,我认为构建器最常见的用例是线程受限的:即在某些方法中作为局部变量。如果您需要多个线程来构建一个列表,那么它是否真的是不可变的? 如果有多个线程进入一个列表,但希望在某个时刻快照它,并说“以后不再更改,它是不可变的”,那么我将编写一些东西,从这些线程中提取元素,并在您知道它已经就绪时将内容冻结到一个新的不可变的列表中。 |