【摘要】 问题现象
写了一个例子测试-SimpleDataFormat
看下面的实验:
package com.programing.unsafe; import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date; public class SimpleDateFor…
问题现象
写了一个例子测试-SimpleDataFormat
看下面的实验:
package com.programing.unsafe;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatThread extends Thread {
private SimpleDateFormat sdf;
private String dateString;
public SimpleDateFormatThread(SimpleDateFormat sdf, String dateString) {
this.sdf = sdf;
this.dateString = dateString;
}
@Override
public void run() {
//测试传入日期和转换日期是否一致
try {
//sdf = new SimpleDateFormat("yyyy-MM-dd"); //创建线程自己的SimpleDateFormat 才能解决这个问题
Date dateRef = sdf.parse(dateString); //使用公共的SimpleDateFormat 线程不安全
String newDateString = sdf.format(dateRef).toString();
if (!newDateString.equals(dateString)) {
System.out.println(Thread.currentThread().getName() + " 报错:" + dateString + " =>" + newDateString);
}else{
System.out.println(Thread.currentThread().getName() + " 正确:" + dateString + " =>" + newDateString);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
package com.programing.unsafe;
import java.text.SimpleDateFormat;
public class SimpleDateFormatTest {
public static void main(String[] args) {
//从结果中可以查看到SimplateDateFormat类再多线程环境中处理日期很容易出现转换错误
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String[] dateStrings = new String[]{"2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04", "2018-01-05", "2018-01-06", "2018-01-07", "2018-01-08", "2018-01-09"};
for (int i = 0; i < dateStrings.length; i++) {
SimpleDateFormatThread thread = new SimpleDateFormatThread(sdf, dateStrings[i]);
thread.start();
}
}
}
© 版权声明文章版权归作者所有,未经允许请勿转载。THE END
喜欢就支持一下吧
相关推荐