SimpleDateFormat 引起的线程安全隐患问题
2014-05-13 14:31
405 查看
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class LocalThreadTest extends Thread{ private final static DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); private String time = "2013-12-12"; LocalThreadTest(String time){ this.time = time; } LocalThreadTest(){ } public Date Convert(String time) throws Exception{ return format.parse(time); } public void run() { try { Date date = Convert(time); System.out.println(Thread.currentThread().getName()+" "+date); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { LocalThreadTest test = new LocalThreadTest(); LocalThreadTest test1 = new LocalThreadTest("2010-12-12"); test.start(); test1.start(); } }
public Date parse(String text, ParsePosition pos) { checkNegativeNumberExpression(); int start = pos.index; int oldStart = start; int textLength = text.length();//断点 calendar.clear(); // Clears all the time fields .......//对calendar的一些操作 calendar.getTime();//返回calendar中存储的时间,此处有断点 }
第一个线程 执行到 calendar.getTime();
第二个线程 执行完成,再继续执行完第一个线程,
结果会是:
Thread-1 Fri Nov 12 00:00:00 CST 2010
Thread-0 Tue Nov 30 00:00:00 CST 2010
或者
Thread-0 Thu Dec 12 00:00:00 CST 2013
Thread-0 Thu Dec 12 00:00:00 CST 2013
线程问题原因,
线程一的结果还未输出,calendar中的时间就被clear,然后第二个线程将 其时间放入calendar,所以第一个线程最终得到的时间就 会和 第二个线程的时间一样。出现线程安全问题。
解决方案:
1>同步代码块
在使用到 SimpleDateFormat 的代码中使用 synchronized 关键字
2>使用 ThreadLocal ,目的是使每个线程都有一份自己的 SimpleDateFormat ,这样上面所说的calendar共享问题就不存在了,当然也就解决了线程安全问题。
相关文章推荐
- SimpleDateFormat 的线程安全问题与 ThreadLocal
- SimpleDateFormat的线程安全问题与解决方案
- SimpleDateFormat的线程安全问题
- SimpleDateFormat的线程安全问题与解决方案
- 一个简单的Java对象池实现——可用来解决SimpleDateFormat的线程安全问题
- SimpleDateFormat的线程安全问题
- SimpleDateFormat的线程安全问题与解决方案
- SimpleDateFormat 的线程安全问题与解决方案
- SimpleDateFormat的线程安全问题
- SimpleDateFormat 的线程安全问题与解决方式
- SimpleDateFormat 的线程安全问题
- SimpleDateFormat的线程安全问题
- SimpleDateFormat线程不安全问题处理
- SimpleDateFormat的线程安全问题与解决方案
- SimpleDateFormat的线程安全问题与解决方案
- SimpleDateFormat的线程安全问题与解决方案
- SimpleDateFormat的线程安全问题与解决方案
- SimpleDateFormat线程不安全问题
- SimpleDateFormat的线程安全问题与解决方案
- SimpleDateFormat的线程安全问题与解决方案(ThreadLocal)