Java Calendar.getInstance线程安全

Java Calendar.getInstance线程安全,java,datetime,calendar,Java,Datetime,Calendar,如果我有以下方法;调用线程安全吗 public Date currentTime() { Date d = null; synchronized(this){ d = Calendar.getInstance().getTime(); } return d; } 我的理解是Calendar.getInstance()不是线程安全的,所以下面的方法不能是线程安全的。对吗 public Date currentTime() { retur

如果我有以下方法;调用线程安全吗

 public Date currentTime() {
    Date d = null;
    synchronized(this){
        d = Calendar.getInstance().getTime();
    }
    return d;
 }
我的理解是
Calendar.getInstance()
不是线程安全的,所以下面的方法不能是线程安全的。对吗

public Date currentTime() {
    return Calendar.getInstance().getTime();

}

我知道它被提升为日期时间API的最佳实践,但这里我坚持使用标准java.util.date/Calendar类。

是的,
Calendar.getInstance()
是线程安全的,因为每次调用都会创建并返回一个新实例。通过同步或将
getTime()
返回的值存储在一个临时变量中,您不会得到任何东西。

在这种上下文中,为什么说线程安全?您没有修改任何变量,时间由系统管理。因此,对该方法的任何调用都将为您提供一个系统的当前时间。在我看来,没有必要对它进行同步。

为什么不在外部类中获取一次日历并保存它,然后在内部getTime()中,您只需使用已有的引用就可以了?很遗憾,您无法利用它。线程安全是Joda Time的主要设计目标。如果您可以使用Java8,请寻找新的捆绑包,它的灵感来自Joda Time,并由JSR310定义。