Java 构造函数内的已同步部分和已同步构造函数的差异

Java 构造函数内的已同步部分和已同步构造函数的差异,java,concurrency,synchronization,synchronized,Java,Concurrency,Synchronization,Synchronized,我注意到了有趣的行为: 我会写字 class My { public My(){ synchronized(this){ // code } } } 但我不会写字 class My { public synchronized My(){ // code } } } 我认为这两种结构的工作原理与JavaAPI相同

我注意到了有趣的行为:

我会写字

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

    }  
}
但我不会写字

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

        }  
    }
我认为这两种结构的工作原理与JavaAPI相同


请澄清这一误解。

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


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

两个线程不可能创建相同的对象


因此,同步修改器对构造函数没有意义。

刚才的可能重复我已经理解,您的答案是错误的,因为构造函数在初始化块之后执行。但在初始化块内,我可以用这个监视器写同步的部分。你觉得怎么样?@gstackoverflow,在调用初始化块之前,将执行超级类构造函数,对象将几乎被创建。请注意我的评论。@gstackoverflow:你可以这样做,因为它已经完成了,它是超级类构造函数。