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:你可以这样做,因为它已经完成了,它是超级类构造函数。