使用ThreadLocal解决SimpleDateFormate

2021-05-06  本文已影响0人  atdoking

类SimpleDateFormat主要负责日期转化与格式化,但在多线程的环境中,使用此类容易造成数据转换及处理的不准确,因为SimpleDateFormate是线程不安全的

那怎么样才能在多线程中使用SimpleDateFormate类进行日期的转换而不出问题呢?

最简单的办法就是哪个线程使用,就哪个线程生成一个SimpleDateFormate一个实例,然后该线程内部进行使用。

但这个方式不够优雅,不够吊炸天。

如果你有印象,其实ThreadLocal类能使线程绑定到指定的对象,使用该类可以解决多线程环境下SimpleDateFormate类处理的错误情况

相同点:

ThreadLocal和其它所有的同步机制都是为了解决多线程中的对同一变量的访问冲突。

不同点:

在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。

import java.text.SimpleDateFormat;

public class DateTools {
    private static  ThreadLocal<SimpleDateFormat> t1 = new ThreadLocal<SimpleDateFormat>();
    public static SimpleDateFormat getSimpleDataFormate(String datePattern){
        SimpleDateFormat sdf = null;
        sdf = t1.get();
        if(sdf == null){
            sdf = new SimpleDateFormat(datePattern);
            t1.set(sdf);
        }
        return sdf;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读