如何安全地发布StringBuffer?

圣安东尼奥

由于StringBuffer是线程安全的,因此可以安全地发布。考虑StringBuffer来源的公共构造函数

public StringBuffer() {
    super(16);
}

super(16)指定此位置的位置

AbstractStringBuilder(int capacity) {
    value = new char[capacity];
}

值声明为

char[] value;

问题:如何StringBuffer安全发布

我有以下课程:

public class Holder{
     public final StringBuffer sb = new StringBuffer();
}

可以认为它是安全出版物吗?我认为不可能。

final保证我们将看到参考的新价值sb但是写入sb内部的的内部状态AbstractStringBuilder(int capacity)是不同步的。因此,没有happens-before顺序,这反过来意味着在构造函数中value调用sb.append(2);和写入时发生读操作valueracy

你能帮忙了解一下吗?也许我错过了什么...

库特里

你能帮忙了解一下吗?也许我错过了什么...

AFAIR后JSR-133可以保证final是你的榜样初始化喜欢之类的领域是竞争条件免费期间实例化过程,只有正确的值将初始化后,被曝光

更新:通过Brian Goetz

在新的内存模型下,在构造函数中写入final字段与在另一个线程中对该对象的共享引用的初始加载之间存在类似事前发生的关系。构造函数完成后,对final字段(以及通过这些final字段间接可访问的变量)的所有写入均变为“ frozen”,并且保证在冻结后获得对该对象的引用的任何线程都可以查看所有冻结值。冰冻的田野。与构造函数关联的冻结之后,初始化final字段的写入操作将不会按操作进行重新排序。

恕我直言,您的问题(和并发理解)非常好,因为它不是明显的语言/平台设计功能,并且仅在Java SE 5.0中得到了解决。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用JavaScript安全地发布消息

来自分类Dev

使用JavaScript安全地发布消息

来自分类Dev

如何由几个不同的人安全地发布相同的npm软件包?

来自分类Dev

如何安全地将代码样本发布到网站上?

来自分类Dev

如何将密码从iOS应用安全地发布到PHP服务器?

来自分类Dev

如何将用户名和密码从设备安全地发布到url

来自分类Dev

如何安全地扩展Ubuntu分区?

来自分类Dev

如何安全地销毁QThread?

来自分类Dev

如何快速安全地存储密码?

来自分类Dev

如何安全地搬运包裹intellij?

来自分类Dev

如何安全地重构动态语言?

来自分类Dev

如何安全地登录用户

来自分类Dev

如何安全地从终端关闭Xfce?

来自分类Dev

您如何安全地调用vsnprintf()?

来自分类Dev

如何安全地试用叉子炸弹

来自分类Dev

如何安全地等待异步方法?

来自分类Dev

如何安全地从终端关闭Xfce?

来自分类Dev

如何安全地扩展Ubuntu分区?

来自分类Dev

如何安全地更新网站?

来自分类Dev

如何安全地共享班级成员?

来自分类Dev

如何安全地登录用户

来自分类Dev

如何安全地取出包裹

来自分类Dev

如何安全地减小分区的大小?

来自分类Dev

如何安全地停止截断命令

来自分类Dev

如何安全地存储各种凭证?

来自分类Dev

如何安全地移除 gwibber?

来自分类Dev

如何“安全地”终止mysqld?

来自分类Dev

如何安全地重置 Oracle 序列?

来自分类Dev

如何安全地改变指针的类型