首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象的引用可以在构造函数完成之前设置吗?

对象的引用可以在构造函数完成之前设置吗?
EN

Stack Overflow用户
提问于 2012-10-22 01:26:04
回答 1查看 612关注 0票数 3

JMM (Java内存模型)可以自由地重新排序语句。

当然,这在处理多线程环境时特别棘手。

JMM规则规定,volatilefinal变量总是在构造函数完成之前完全初始化,并且只有当引用没有从构造函数中“转义”时才能完成。

这意味着“正常”变量(非final和非volatile)不会被任何并发线程看到。

乍一看,我的问题似乎很愚蠢,但实际上并非如此:

构造函数完成后,是否有任何对象的引用设置为(完成时已经完成了所有变量的初始化,而是简单地到达了‘构造函数’过程的末尾)?在任何JSR中是否有断言它的规则?或者是否存在一种特殊情况,即在客户端构造函数完成之前可以将任何引用发送回客户端

事实上,如果语句重新排序被认为是如此自由,也可能意味着在构造函数完成之前发送对象的引用“发生”。因此,我们会遇到同样的情况"this转义“来避免。

简单地说,引用总是在构造函数完成后发送吗?

在搜索JLS:之后,对象引用返回的唯一地方是:(JSR-12.5摘录)

在作为结果返回对新创建对象的引用之前,将使用以下过程处理指示的构造函数以初始化新对象:

与JMM无关..。因此,可以确保构造函数完成总是发生-在传递引用之前,不管是什么情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-22 01:58:21

在线程的上下文中,将设置引用。但是,JMM允许在一个线程中设置共享变量,而不是与另一个线程同步。

易失性和最终性通过保证线程间对变量的读和写同步来保证这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13003924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档