【问题标题】:synchronized section inside constructor and syncronized constructor differences构造函数内部的同步部分和同步构造函数的区别
【发布时间】:2014-04-28 09:35:51
【问题描述】:

我注意到有趣的行为:

我会写

class My {
     public My(){
        synchronized(this){
            // code
        }

    }  
}

但我不会写

class My {
         public synchronized My(){
                // code
            }

        }  
    }

我认为这两种结构的工作方式与 java API 相同。

请澄清这个误解。

【问题讨论】:

标签: java concurrency synchronization synchronized


【解决方案1】:

在第一种情况下,对象几乎被创建,只有构造函数的主体需要执行。

但是,在第二种情况下,不会有任何对象要同步。

【讨论】:

  • 刚才我明白你的回答是不正确的,因为构造函数是在初始化块之后执行的。但是在初始化块中,我可以用监视器编写同步部分。你怎么看?
  • @gstackoverflow,在调用初始化块之前,将执行超类构造函数,对象将几乎创建。
  • 请实现我的评论。
  • @gstackoverflow :你可以这样做,因为它已经完成了它的超类构造函数。
【解决方案2】:

两个线程创建同一个对象是不可能的!

因此同步修饰符对构造函数没有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 2011-10-23
    • 2011-04-16
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多