这是指向Java 7
中Calendar和GregorianCalendar的源代码的链接。
如果阅读该代码,您将看到没有实例方法同步,并且实例字段都不同步
volatile。您还将看到,即使字段
get方法也可能导致Calendar实例发生变异。并且由于没有执行同步,因此在执行此类更改操作之后,不同的线程可能会看到Calendar对象字段的旧版本。
作为记录,在调用此方法的过程中/期间,发生了get方法中的突变动作:
1555 protected void complete() 1556 { 1557if (!isTimeSet) 1558 updateTime(); 1559if (!areFieldsSet || !areAllFieldsSet) { 1560 computeFields(); // fills in unset fields 1561 areAllFieldsSet = areFieldsSet = true; 1562} 1563 }简而言之,
Calendar该类不是线程安全的,
GregorianCalendar也不是因为它继承了非线程安全的字段和方法。
但是,不要只相信我的话。对源代码进行自己的分析。
而且,最重要的是,文档没有以一种或另一种方式说任何东西,既不是针对日历,也不是针对日期。
如果javadocs没有指定类的线程安全,则应 假定 它不是线程安全的。



