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定义。