Java中SimpleDateFormate是线程不安全的又会怎么样( 二 )
会发现有这样的调用Date parse() { calendar.clear(); // 清理calendar ...savedCalendar.set(Calendar.YEAR, defaultCenturyStartYear + 100); // 执行一些操作, 设置 calendar 的日期什么的 calendar.getTime(); // 获取calendar的时间}这里会导致的问题就是, 如果 线程A 调用了 sdf.parse(), 并且进行了 calendar.clear()后还未执行calendar.getTime()的时候,线程B又调用了sdf.parse(), 这时候线程B也执行了sdf.clear()方法, 这样就导致线程A的的calendar数据被清空了(实际上A,B的同时被清空了). 又或者当 A 执行了calendar.clear() 后被挂起, 这时候B 开始调用sdf.parse()并顺利i结束, 这样 A 的 calendar内存储的的date 变成了后来B设置的calendar的date
所以在多线程使用共享SimpleDateFormate的时候一定要注意线程安全。
要么采用synchronized 要么采用ThreadLocal本地线程变量来解决这个问题。http://www.cnblogs.com/zemliu/archive/2013/08/29/3290585.html 【Java中SimpleDateFormate是线程不安全的又会怎么样】 这个blog上有详细的解决办法
推荐阅读
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 27岁,转行java的血与泪,该何去何从
- 怎样统计工程中未使用的java类
- 新互联网网站用Java还靠谱么对比Php,Python,Ruby的话
- 我想学java和安卓软件开发?
- 学计算机专业,java那些和网站开发选台式还是笔记本好
- JAVA设计思路
- 本人大专毕业一年,想要去培训,定了JAVAEE和安卓两个方向,应该学那个纠结,求帮助
- 从未接触过软件测试和java,可以学习主要是自学这两种其一吗
