为什么Final字段不能在Java中易变?

极客 :

我想理解为什么声明为final的引用不能声明为Volatile。在SO上也有类似的问题[ 为什么Java中的Object成员变量不能同时为final和volatile?

[1]:为什么Java中的Object成员变量不能既是final也不是volatile?但我不确定该答案是否能理解FINAL。

现在,最终变量的状态可以在初始化后确定地更改。只有引用不能初始化为另一个对象。

例如考虑以下成员变量

final StringBuilder sb = new StringBuilder("CAT");

现在另一个线程将sb更改为:

sb.append("S");

如果此变量为Non-Volatile,此更改是否可用于Java内存模型中的不同线程?

编辑:我将StringBuffer更改为StringBuilder,以使某些人明白我的观点。

我们:

如果此变量为Non-Volatile,此更改是否可用于Java内存模型中的不同线程

是的,但这是因为StringBuffer是线程安全的-意味着它在内部提供锁定,这将导致内存障碍,因此其他线程可以查看此更新。

可变的引用不会影响对象的操作,而是会影响引用。

所以你可以做

 volatile StringBuilder b = new StringBuilder();

 b = someOtherStringBuilder;

现在,由于b是volatile,其他线程将看到此引用的更新。

但是做

 b.append("foo");

不能保证其他线程会看到对现有b对象的更改与StringBuffer不同,StringBuilder不是线程安全的,因此无论如何都不要提供自己的锁定,否则不要这样做。

如果您想保证b.append("foo");在不进行任何锁定的情况下对其他线程可见,那么StringBuilder中的每个成员字段也需要是可变的。(尽管这不能使其线程安全)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

为什么我不能在界面中访问此字段?

来自分类Dev

为什么不能在ElasticSearch 6.0中启用“ _all”字段?

来自分类Dev

为什么我不能在声明中定义静态字段?

来自分类Java

为什么我不能在Java中传递这样的数组

来自分类Java

Java:为什么我不能在Comparator中抛出异常?

来自分类Java

为什么“ array instanceof Iterable”不能在Java中编译?

来自分类Dev

为什么Bash`(())`不能在`[[]]`中工作?

来自分类Dev

为什么我不能在HTML5数字字段中输入500?

来自分类Dev

为什么我的选择字段事件处理程序不能在Chrome / Android中工作?

来自分类Dev

为什么不能在JIRA中设置“分辨率”字段?

来自分类Dev

为什么它不能在文本字段中连续写?

来自分类Dev

为什么不能在原型的BallJoint节点的“设备”字段中插入RotationalMotor节点?

来自分类Dev

为什么不能在输入字段中选择并输入数据?

来自分类Java

为什么在Java中使方法易变?

来自分类Dev

为什么我们不能在TypeScript类中定义const字段,为什么静态readonly不起作用?

来自分类Java

Java:为什么我不能在任何类中使用final来访问局部变量JPanel?

来自分类Java

为什么不能在Java中其他类的方法中创建类对象?

来自分类Dev

为什么`++`增加Groovy中的final字段?

来自分类Java

为什么我不能在Java中“静态导入”“等于”方法?

来自分类Java

为什么不能在方法级别抛出Java流中的检查异常?

来自分类Java

为什么不能在Java中var关键字被分配lambda表达式?

来自分类Java

为什么不能在Java中var关键字被分配lambda表达式?

来自分类Java

为什么我不能在Java 8 lambda表达式中引发异常?

来自分类Dev

为什么不能在Java中的开关内初始化变量?

来自分类Java

为什么不能在Java中将字节数组存储在整数数组中

来自分类Java

为什么我不能在Java中创建类型参数数组?

来自分类Dev

为什么不能在Java中调用添加到匿名类的方法?

来自分类Dev

为什么我们不能在Java 8流中抛出异常?

来自分类Java

为什么我不能在Java的内部类中创建枚举?

TOP 榜单

热门标签

归档