java - 为什么 Object 成员变量在 Java 中不能既是 final 又是 volatile?

标签 java multithreading syntax

如果在一个类中我有一个 ConcurrentHashMap 实例,该实例将被多个线程修改和读取,我可能会这样定义:

public class My Class {

    private volatile ConcurrentHashMap<String,String> myMap = new ConcurrentHashMap<String,String>();
...
}

final 添加到 myMap 字段会导致错误提示我只能使用 final 或 volatile。为什么不能两者兼得?

最佳答案

volatile 只与变量本身的修改有关,与它所引用的对象无关。有一个 final volatile 字段是没有意义的,因为 final 字段不能被修改。只需声明字段 final 就可以了。

关于java - 为什么 Object 成员变量在 Java 中不能既是 final 又是 volatile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9328252/

相关文章:

java - 用更少的耦合在 Java 中表示多重性

python - 什么时候不使用 asyncio 有意义?

java - 如何让 Java 线程通知自己?

linux - 使用现代操作系统调度程序,手动将进程锁定到特定 CPU/内核是否仍然有意义?

assembly - 具有 2 个或 3 个操作数的 ARM ADD 之间的区别?

c++ - c++ 函数末尾的这是什么,...)

Java 反射 getDeclaredMethod(...) 返回 Null

java - 哪些 Web 框架可以在 Google 应用引擎上成功使用? Struts/Spring 怎么样?

java - 使用 Kryo(自定义序列化程序)序列化对象

java - 无法使用休息服务