【发布时间】:2015-07-02 00:01:31
【问题描述】:
Why can't Java constructors be synchronized? 的一个后续问题:如果一个对象的构造函数不能同步,这是否意味着不可能同时创建两个实例?例如:
public class OutgoingMessage {
public OutgoingMessage() {
this.creationTime = new Date();
}
Date creationTime;
}
creationDate.getTime() 是否总是返回不同的值?我知道多任务/多线程的基础知识,但是多个 CPU 内核呢?在那种情况下,操作系统不必切换上下文还是我错了?
【问题讨论】:
-
你的意思是
creationTime.getDate()? -
即使忽略多核
creationTime对于两个对象仍然可能相同。 -
对象在构造之前对其他线程不可见并不意味着不能同时构造2个对象
-
@MiroKropacek 在实用程序类中使用同步静态方法。我不相信你真的想要这样做,但不知道你在使用什么价值很难说。
-
我在这里闻到了 XY 问题;也就是说,您在问问题 X,但 X 不一定是解决您的实际问题 Y 的最佳途径。为什么您关心是否可以“同时”创建两个对象?是不是您不希望两个对象具有相同的
creationTime?在这种情况下,编写一个静态方法 getCreationTimeForNewMessage() 保证永远不会多次返回相同的时间戳,并从您的构造函数中调用该方法。或者,如果不是,那么是真正的问题是什么?
标签: java multithreading