http://jjhpeopl.iteye.com/blog/2321528
总结:
SimpleDateFormat是线程不安全的,是因为SimpleDateFormat在对时间进行格式化的时候,先对calendar对象进行setTime操作,在多次调用SimpleDateFormat的时候,就会对该对象进行覆盖,造成线程不安全。
解决方法:
1.在每次需要使用的时候,进行SimpleDateFormat实例的创建,会占用一定的内存,不建议使用。
2.使用同步的方式,对SimpleDateFormat进行加锁,,也就是会造成线程间的互斥,对性能影响比较大。
3.使用ThreadLocal进行保存,相当于一个线程只会有一个实例,进而减少了实例数量,也防止了线程间的互斥,推荐使用这种方式。
FastDateFormat是线程安全的,可以直接使用,不必考虑多线程的情况
Joda-Time与以上两种有所区别,不仅仅可以对时间进行格式化输出,而且可以生成瞬时时间值,并与Calendar、Date等对象相互转化,极大的方便了程序的兼容性。
Joda-Time的类具有不可变性,因此他们的实例是无法修改的,就跟String的对象一样。
这种不可变性提现在所有API方法中,这些方法返回的都是新的类实例,与原来实例不同。