ThreadLocal和线程安全的日期工具类

ThreadLocal为解决多线程程序的并发问题提供了一种新的思路,使用这个工具类可以很简洁地解决线程安全问题。
使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。从线程的角度看,目标变量就像是线程的本地变量,这也是类名中Local所要表达的含义。

以下使用ThreadLocal实现一个线程安全的日期工具类:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 线程安全的日期转换工具类
 */
public class DateUtils {
    private static ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>() {
        @Override
        protected DateFormat initialValue() {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }
    };

    public static Date parse(String str) throws ParseException {
        return threadLocal.get().parse(str);
    }

    public static String format(Date date) {
        return threadLocal.get().format(date);
    }
}

你可能感兴趣的:(Java)