
正如已经指出的那样,它是绝对线程安全的,并且
final由于其内存可见性影响而在这里很重要。
的存在
final保证其他线程将看到在构造函数中,无需任何外部同步完成后,在地图的值。没有
final它,不能在所有情况下都得到保证,并且当使新构造的对象可用于其他线程时,您需要使用
安全的发布习惯 ,即(来自Java Concurrency in Practice):
- 从静态初始化程序初始化对象引用;
- 将对它的引用存储到volatile字段或AtomicReference中;
- 将对它的引用存储到适当构造的对象的最终字段中;要么
- 将对它的引用存储到由锁适当保护的字段中。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)