java - 是否可以同时创建两个实例?

标签 java multithreading

类似于 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/

相关文章:

java - 为什么 Java 不允许类中的隐式泛型?

java - 为什么无法使用 system.out.println 命令打印 2 个字符

java - 如何让 string.format 在编译时报错

c# - 两线程一核

Java GUI,需要在不卡住 GUI 的情况下暂停方法

java - 有多少个可调用对象?

php - 关闭 PHP 文件后保持 PHP 脚本运行

java - 文件上传时损坏

c# - 当前进程没有线程?

java - 组织.apache.jasper.JasperException : Cannot find any information on property 'sName' in a bean of type 'AddUserBean'