专栏名称: java那些事
分享java开发中常用的技术,分享软件开发中各种新技术的应用方法。每天推送java技术相关或者互联网相关文章。关注“java那些事”,让自己做一个潮流的java技术人!《java程序员由笨鸟到菜鸟》系列文章火热更新中。
目录
相关文章推荐
51好读  ›  专栏  ›  java那些事

你还在用SimpleDateFormat?你的项目崩没?

java那些事  · 公众号  · Java  · 2019-04-03 16:00

正文

请到「今天看啥」查看全文


一般我们使用SimpleDateFormat的时候会把它定义为一个 静态变量 ,避免频繁创建它的对象实例,如下代码:

是不是感觉没什么毛病?单线程下自然没毛病了,都是运用到多线程下就有大问题了。 测试下:

控制台打印结果:

你看这不崩了?部分线程获取的时间不对,部分线程直接报 java.lang.NumberFormatException:multiple points 错,线程直接挂死了。

三、多线程不安全原因

因为我们把SimpleDateFormat定义为 静态变量 ,那么多线程下SimpleDateFormat的实例就会 被多个线程共享 ,B线程会读取到A线程的时间,就会出现时间差异和其它各种问题。SimpleDateFormat和它继承的DateFormat类也不是线程安全的。

来看看SimpleDateFormat的 format() 方法的源码:







请到「今天看啥」查看全文