高并发情景下避免使用SimpleDateFormat

平时写程序都习惯了使用SimpleDateFormat,当需要创建当前时间的时间戳,直接调用老套方法

SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd");

然后需要创建时间戳的时候,直接调用方法

df.format (new Date()) 

在单线程工程中,这种方法毫无问题,但是如果在多线程高并发情景中,这种问题就可能会发生问题。因为SimpleDateFormat是线程不安全的,多线程环境下不能用。不然,可能会发生一些跟你预期不一样的结果。 如何解决? 使用ThreadLocal,我自定义了一个线程安全工具类,代码如下:

public class ThreadLocalDateUtil {
    private static final String date_format = "yyyy-MM-dd HH:mm:ss";
    private static ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>(); 
 
    public static DateFormat getDateFormat()   
    {  
        DateFormat df = threadLocal.get();  
        if(df==null){  
            df = new SimpleDateFormat(date_format);  
            threadLocal.set(df);  
        }  
        return df;  
    }  

    public static String formatDate(Date date) throws ParseException {
        return getDateFormat().format(date);
    }

    public static Date parse(String strDate) throws ParseException {
        return getDateFormat().parse(strDate);
    }   
}

这样,以后创建时间戳和转换解析时间戳都用ThreadLocalDateUtil 的方法,能保证线程安全。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT杂记

DateFormat 线程不安全

一、测试 测试代码如下:  private static SimpleDateFormat sdf = new SimpleDateFormat("yy...

21850
来自专栏计算机视觉与深度学习基础

Leetcode 140 Word Break II

Given a string s and a dictionary of words dict, add spaces in s to construct a...

191100
来自专栏计算机视觉与深度学习基础

Leetcode 274. H-Index

Given an array of citations (each citation is a non-negative integer) of a rese...

22480
来自专栏菩提树下的杨过

mongodb-java-driver基本用法

1、先下载mongodb-java-driver 目前最新版本是2.9.3 2、下面是基本的CRUD示例代码: 1 package com.cnblogs....

22980
来自专栏Android 研究

OKHttp源码解析(七)--中阶之缓存机制

Entry内部类是实际用于存储的缓存数据的实体类,每一个url对应一个Entry实体

22660
来自专栏技术墨客

Spring核心——MessageSource实现国际化

在上下文与IoC对ApplicationContext以及Context相关的设计模式进行了介绍。ApplicationContext作为一个Context在应...

1.1K10
来自专栏封碎

不小心犯的一个空指针错误 JavaEclipseIDEIDEAJVM

      今天碰到了一个空指针异常,代码看起来很普通,一点也看不出会空指针,后来debug才发现了问题所在。这是很容易忽略的地方,记一笔,不知道大家有没有碰到...

14720
来自专栏偏前端工程师的驿站

Java魔法堂:Date与日期时间格式化

一、前言                                                                            ...

25680
来自专栏linux驱动个人学习

Linux内存描述之内存节点node--Linux内存管理(二)

这点前面是说的很明白了, NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接, 因此相对于任何一个CPU访问...

46220
来自专栏数据结构与算法

BZOJ4516: [Sdoi2016]生成魔咒(后缀数组 set RMQ)

首先,本质不同的子串的个数 $ = \frac{n(n + 1)}{2} - \sum height[i]$

11120

扫码关注云+社区

领取腾讯云代金券