出于以下两个原因,需要设计不需要同步的对象:
- 对象的用户可能会忘记同步。
- 即使开销很小,同步也不是免费的,尤其是当您的对象不经常被许多不同的线程使用时。
由于上述原因非常重要,因此最好学习有时困难的规则,并以编写者的身份创建不需要同步的安全对象,而不是希望代码的所有用户都记住正确使用它。
还请记住,作者并不是说对象是不安全发布的,它是在没有同步的情况下安全发布的。
关于您的第二个问题,我刚刚检查了一下,而书中并未保证其他线程将始终看到对更新对象的引用,只是如果这样做,它将看到完整的对象。但是我可以想象,如果它是通过另一个(
Runnable?)对象的构造函数发布的,那将是美好的。但这确实有助于解释所有情况。
编辑:
有效不可变和不可变有效不可变和不可变
之间的区别是,在第一种情况下,您仍然需要以安全的方式发布对象。对于真正的不可变对象,这是不需要的。因此,首选真正不变的对象,因为出于上述原因,它们更易于发布。



