从SimpleDateFormat出发去理解线程安全
2016-08-24 17:03
274 查看
项目中多个地方需要用到SimpleDateFormat,为了方便我在service中把SimpleDateFormat写成全局变量,在多线程调用service时突然发现有很多未知意义的时间被格式化,
查了资料得知SimpleDateFormat不是线程安全的。当多线程去调用该变量的时候,就会得到许多不可预期的值。
那该问题如何解决呢?最简单的当然是在每一个线程调用service调用SimpleDateFormat时,重新new一个。这样做自然是为了线程本地化,
为了实现线程本地化,还可以使用threadlocal。
举个小栗子:
ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>(){ @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd");}; }; private SimpleDateFormat getFormatter(){ return formatter.get(); }
这样在使用的时候直接用:
formatter.get()
就可以得到一个本地化的SimpleDateFormat对象了。当然也可以简单的将SimpleDateFormat对象定义为final类型。
本地化的思路是以空间换时间,实现线程安全。也有以时间换空间的做法,比如同步机制,暂时不详细介绍。
相关文章推荐
- 关于SimpleDateFormat安全的时间格式化线程安全问题
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- SimpleDateFormat的测试,此类不是线程安全的。
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 关于SimpleDateFormat安全的时间格式化线程安全问题
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 转:深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java1:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- SimpleDateFormat 是非线程安全的,声明称静态变量会报错
- SimpleDateFormat线程安全问题解决方案
- Scala使用SimpleDateFormat出现线程安全问题的解决办法
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- SimpleDateFormat线程安全的问题