多线程:final变量

在Java内存模型中,允许编译器和处理器对指令进行重排序,重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。final和volatile关键字都能禁止指令重排序。

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

其他线程会在构造函数完成构造后看到这个accounts变量。
若不使用final,其他线程可能看到null,而不是新构造的HashMap。
但对这个HashMap的操作不是线程安全的,多线程读写时仍需要同步。

被final声明的域字段只能初始化一次,并且永远不会改变。final实现了一个线程安全的不可变对象,保证线程看到对象的final域是被正确初始化后的。

猜你喜欢

转载自blog.csdn.net/baidu_25104885/article/details/88052941
今日推荐