Java 常用工具类(4) : 线程安全的日期工具类
2018-03-01 16:29
483 查看
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * 线程安全的日期工具类 */ public class DateUtil { /** 锁对象 */ private static final Object lockObj = new Object(); /** 存放不同的日期模板格式的sdf的Map */ private static Map<String, ThreadLocal<SimpleDateFormat>> sdfMap = new HashMap<String, ThreadLocal<SimpleDateFormat>>(); /** * 返回一个ThreadLocal的sdf,每个线程只会new一次sdf * * @param pattern * @return */ private static SimpleDateFormat getSdf(final String pattern) { ThreadLocal<SimpleDateFormat> tl = sdfMap.get(pattern); // 此处的双重判断和同步是为了防止sdfMap这个单例被多次put重复的sdf if (tl == null) { synchronized (lockObj) { tl = sdfMap.get(pattern); if (tl == null) { // 只有Map中还没有这个pattern的sdf才会生成新的sdf并放入map System.out.println("put new sdf of pattern " + pattern + " to map"); // 这里是关键,使用ThreadLocal<SimpleDateFormat>替代原来直接new SimpleDateFormat tl = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { //System.out.println("thread: " + Thread.currentThread() + " init pattern: " + pattern); return new SimpleDateFormat(pattern); } }; sdfMap.put(pattern, tl); } } } return tl.get(); } /** * 是用ThreadLocal<SimpleDateFormat>来获取SimpleDateFormat,这样每个线程只会有一个SimpleDateFormat * * @param date * @param pattern * @return */ public static String format(Date date, String pattern) { return getSdf(pattern).format(date); } public static Date parse(String dateStr, String pattern) throws ParseException { return getSdf(pattern).parse(dateStr); } }
相关文章推荐
- Java 常用工具类(16) : jsp和thymeleaf及其他模板页面静态化工具类
- java日期操作常用工具
- Java 常用工具类(11) : UUID生成工具类
- java中常用的工具类(三)连接数据库的综合类,DES加密和解密,Base64,ExcelUtil工具类,
- Java工作利器之常用工具类(一)——数字工具类-数字转汉字
- java中常用的工具类(一)MD5,File工具类,String工具类
- FormatDateTime Java ,Android 常用的日期格式工具类
- 日期转换工具以及常用的字符,产生随机数,将java流中的编码转换为utf-8----java
- Java 常用工具类(8) : MD5加密工具类
- Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算
- Java工作利器之常用工具类(三)——字符串工具类-智能截取
- Java工作利器之常用工具类(四)——Json工具类,使用正则支持xml与json互转
- 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类
- java中常用的工具类(一)MD5,File工具类,String工具类
- Java 常用工具类(16) : BigDecimal加减乘除工具类
- java开发中常用的日期时间工具类 DateUtil
- java日期格式化工具类【包含常用的日期格式化方法】
- Java常用的日期工具类
- java日期计算工具类【包含常用的日期计算方法】
- Java常用工具类API(Arrays类,Collections类,包装类,日期类,Math类,Systeml类)