博客
关于我
为什么说SimpleDateFormat是线程不安全的?
阅读量:264 次
发布时间:2019-02-28

本文共 1296 字,大约阅读时间需要 4 分钟。

SimpleDateFormat线程不安全性的演示

代码概述

以下是一个演示SimpleDateFormat线程不安全性的Java代码示例。该代码使用多线程环境下 SimpleDateFormat 的一个潜在问题,展示了其线程不安全性。

public class SpringbootApplication {    static ExecutorService executorService = Executors.newFixedThreadPool(10);    static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    static Set
set = new HashSet<>(); public static String addDate(int seconds) { Date date = new Date(1000 * seconds); synchronized (SpringbootApplication.class) { String result = sdf.format(date); return result; } } public static void main(String[] args) throws Exception { for (int i = 0; i < 100; i++) { int a = i; executorService.execute(new Runnable() { @Override public void run() { String result = addDate(a); set.add(result); } }); } TimeUnit.SECONDS.sleep(5); System.out.println(set.size()); }}

运行结果

在未加锁之前,运行该代码会得到以下结果:

  • 运行2次,集合中包含2个不同的元素。

  • 每次运行的结果都不同,这表明 SimpleDateFormat 在多线程环境下可能存在线程安全问题。

  • 当在 addDate 方法中添加 synchronized 键字后,运行结果如下:

  • 运行2次,集合中包含100个不同的元素。

  • 结果与循环次数一致,表明锁有效地确保了线程安全。

  • 总结

    通过多次运行和对比加锁前后的效果,可以确认SimpleDateFormat在多线程环境下存在线程不安全问题。使用 synchronized 键字可以有效地解决该问题。

    转载地址:http://adjp.baihongyu.com/

    你可能感兴趣的文章
    OSPF技术连载21:OSPF虚链路,现代网络逻辑连接的利器!
    查看>>
    OSPF技术连载22:OSPF 路径选择 O > O IA > N1 > E1 > N2 > E2
    查看>>
    Padding
    查看>>
    paddlehub安装及对口罩检测
    查看>>
    paddle的两阶段基础算法基础
    查看>>
    SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
    查看>>
    PageHelper 解析及实现原理
    查看>>
    pageHelper分页工具的使用
    查看>>
    PageHelper:上手教程(最详细)
    查看>>
    PageOffice如何实现从零开始动态生成图文并茂的Word文档
    查看>>
    PageRank算法
    查看>>
    Paint类(画笔)
    查看>>
    paip.android 手机输入法制造大法
    查看>>
    Palindrome Number leetcode java
    查看>>
    Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
    查看>>
    Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
    查看>>
    Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
    查看>>
    Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
    查看>>
    pandas :将多列汇总为一列,没有最后一列
    查看>>
    pandas :将时间戳转换为 datetime.date
    查看>>