final变量——保证线程安全读取域的第三种方法
2019-09-28 本文已影响0人
魂之挽歌w
我们都知道,除非使用锁或者volatile,否则无法从多个线程安全地读取一个域。
但是实际上还有一种情况可以安全地访问一个共享域,即将这个域声明为final时。考虑以下声明:
final Map<String ,String> accounts = new HashMap<>();
如果不使用final,就不能accounts的可见性,即其他线程看到的很有可能不是accounts更新后的值,比如有可能只是null,而不是构造完成的HashMap。
当然,使用final并不能保证对Map映射表操作的安全性,如果多个线程读写映射表,仍然是需要同步的。