SimpleDateFormat线程不安全验证

@Slf4j
public class Test {
 
    private static ExecutorService service;
 
    static {
        ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("thread-%d").build();
        service = new ThreadPoolExecutor(50, 100, 1, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), threadFactory);
    }
 
    private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
    public static void main(String[] args) {
        String oldDate = SIMPLE_DATE_FORMAT.format(new Date());
 
        for (int i = 0; i < 100; i++) {
            service.execute(()->{
                Date parse = null;
                try {
                    parse = SIMPLE_DATE_FORMAT.parse(oldDate);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                String newDate = SIMPLE_DATE_FORMAT.format(parse);
                //多次转换,查看是否相等
                log.info(StringUtils.equals(oldDate, newDate) + "");
            });
 
        }
    }
}

上述代码执行后出现大量空指针异常和false的结果。

证明SimpleDateFormat确实不是线程安全的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容