final变量——保证线程安全读取域的第三种方法

2019-09-28  本文已影响0人  魂之挽歌w

  我们都知道,除非使用锁或者volatile,否则无法从多个线程安全地读取一个域。
但是实际上还有一种情况可以安全地访问一个共享域,即将这个域声明为final时。考虑以下声明:

final Map<String ,String> accounts = new HashMap<>();

如果不使用final,就不能accounts的可见性,即其他线程看到的很有可能不是accounts更新后的值,比如有可能只是null,而不是构造完成的HashMap。
当然,使用final并不能保证对Map映射表操作的安全性,如果多个线程读写映射表,仍然是需要同步的。

上一篇下一篇

猜你喜欢

热点阅读