类似于 Why can't Java constructors be synchronized? 的后续问题:如果一个对象的构造函数不能同步,是否意味着不可能同时创建两个实例?例如:
public class OutgoingMessage {
public OutgoingMessage() {
this.creationTime = new Date();
}
Date creationTime;
}
creationDate.getTime()
总是会返回不同的值吗?我知道多任务/多线程的基础知识,但多 CPU 内核呢?在那种情况下,操作系统不必切换上下文,或者我在这里错了吗?
最佳答案
if an object's constructor can't be synchronized, does that mean it's impossible to create two instances at literally the same time?
没有。正如另一个问题状态中的答案一样,构造函数不能简单地同步,因为在调用构造函数之前没有任何东西可以同步。你可以这样做:
public OutgoingMessage(){
synchronized(this){
//synchronized constructor
}
}
但问题就变成了:两个线程究竟如何同时访问同一实例的同一个构造函数?根据构造函数如何工作的定义,他们不能。这就是为什么您不能在构造函数上进行同步的原因 - 因为它没有任何意义。
这不是说一个类的两个实例不能同时构造。
关于java - 是否可以同时创建两个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29829585/