首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Java构造函数不能同步?

为什么Java构造函数不能同步?
EN

Stack Overflow用户
提问于 2011-02-03 05:39:47
回答 5查看 33.9K关注 0票数 68

根据the Java Language Specification的说法,构造函数不能被标记为已同步,因为在创建对象的线程完成它之前,其他线程无法看到正在创建的对象。这看起来有点奇怪,因为我确实可以让另一个线程在构造对象时查看它:

代码语言:javascript
运行
复制
public class Test {
    public Test() {
       final Test me = this;
       new Thread() {
           @Override
           public void run() {
               // ... Reference 'me,' the object being constructed
           }
       }.start();
    }
}

我知道这是一个相当做作的例子,但在理论上,似乎有人可以想出一个更现实的情况,将构造函数标记为同步是合法的,以防止像这样的线程竞争。

我的问题是:有没有理由让Java明确禁止构造函数上的synchronized修饰符?也许我上面的例子是有缺陷的,或者可能真的没有原因,这是一个武断的设计决定。不管是哪种情况,我都很好奇,很想知道答案。

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

https://stackoverflow.com/questions/4880168

复制
相关文章

相似问题

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