java SimpleDateFormat线程安全问题复现

java Terry 206浏览 0评论

SimpleDateFormat非线程安全的,在多线程环境下很容易出现问题。

public class SimpleDateFormatTest {
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static ExecutorService executor = Executors.newFixedThreadPool(15);

    public static void main(String[] args) {
        for(int i=0;i<10000;i++){
            int finalI = i;
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        System.out.println(sdf.parse("2019-06-03 15:24:00")+ "---" +finalI);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        executor.shutdown();
    }
}

 

执行上面代码,很容易看到解析异常和错误
解析错误

程序异常

相比于异常解析出错误日期是更可怕的。如果每次都new 一个新的SimpleDateFormat对象,虽然可以避免上诉问题,但是高并发情况下感觉也不是太好

转载请注明:Terry's blog » java SimpleDateFormat线程安全问题复现

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址