可以同时创建两个实例吗?

Mir*_*cek 5 java multithreading

关于为什么Java构造函数不能同步的后续问题?:如果对象的构造函数无法同步,这是否意味着无法在字面上同时创建两个实例?例如:

public class OutgoingMessage {
    public OutgoingMessage() {
        this.creationTime = new Date();
    }
    Date creationTime;
}
Run Code Online (Sandbox Code Playgroud)

将creationDate.getTime()始终返回不同的值?我知道多任务/多线程的基础知识但是多CPU核心呢?在这种情况下,操作系统不必切换上下文,或者我错了吗?

Kev*_*man 7

如果对象的构造函数无法同步,这是否意味着无法在字面上同时创建两个实例?

否.作为另一个问题状态的答案,构造函数无法简单,因为在调用构造函数之前没有任何内容可以同步.你可以这样做:

public OutgoingMessage(){
   synchronized(this){
      //synchronized constructor
   }
}
Run Code Online (Sandbox Code Playgroud)

但问题就变成了:两个线程如何同时访问同一个实例的同一构造函数?根据构造函数的工作原理,他们无法做到.这就是为什么你不能在构造函数上同步 - 因为它没有任何意义.

这并不是说两个类的实例不能同时构建.