ThreadLocal类之简单应用示例

栏目: Java · 发布时间: 7年前

内容简介:ThreadLocal类之简单应用示例

在日常开发的系统中,日期处理是非常非常用的一个功能,处理的日期的时候就需要用到SimpleDateFormat对象,但是我们都知道SimpleDateFormat本身不是线程安全的(如果不知道的请看源码),所以就需要频繁创建SimpleDateFormat这个对象。但是我们知道创建这个对象本身不仅是很费时的,而且创建的这些对象存活期很短,导致内存中大量这样的对象需要被GC,所以我们自然而然的想到使用ThreadLocal来给每个线程缓存一个SimpleDateFormat实例,提高性能。下面是一个具体的实现的小例子,其实不仅针对SimpleDateFormat对象,对于数据库连接等等都可以这么使用。

package cn.bridgeli.demo;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

public class DateFormatFactory {

    private static final Map<DatePatternEnum, ThreadLocal<DateFormat>> pattern2ThreadLocal;

    static {
        DatePatternEnum[] patterns = DatePatternEnum.values();
        int len = patterns.length;
        pattern2ThreadLocal = new HashMap<DatePatternEnum, ThreadLocal<DateFormat>>(len);

        for (int i = 0; i < len; i++) {
            DatePatternEnum datePatternEnum = patterns[i];
            final String pattern = datePatternEnum.pattern;

            pattern2ThreadLocal.put(datePatternEnum, new ThreadLocal<DateFormat>() {
                @Override
                protected DateFormat initialValue() {
                    return new SimpleDateFormat(pattern);
                }
            });
        }
    }

    // 获取DateFormat
    public static DateFormat getDateFormat(DatePatternEnum patternEnum) {
        ThreadLocal<DateFormat> threadDateFormat = pattern2ThreadLocal.get(patternEnum);
        // 不需要判断threadDateFormat是否为空
        return threadDateFormat.get();
    }
}

对应的时间枚举类(如果还有其他格式的时间需要处理,可以直接在这个类里面添加即可):

package cn.bridgeli.demo;

public enum DatePatternEnum {

    TimePattern("yyyy-MM-dd HH:mm:ss"),
    DatePattern("yyyy-MM-dd");

    public String pattern;

    private DatePatternEnum(String pattern) {
        this.pattern = pattern;
    }
}

这样我们就可以每次调用DateFormatFactory.getDateFormat获取到对应的时间格式化类了。之前我们提到使用ThreadLocal同时可以避免参数传递。假如某个类的某个方法要调用到其他类的方法,而且方法内需要使用时间格式化类。按照正常情况下我们把该时间格式化类作为参数进行传递,但如果有了ThreadLocal这个类,我们可以不需要作为参数传递了,直接在方法类通过ThreadLocal得到时间格式化类。

参考资料:

1. https://segmentfault.com/a/1190000000537475

作 者: Bridge Li,http://www.bridgeli.cn

原文链接: http://www.bridgeli.cn/archives/367

版权声明:本站作品如非特殊声明均为原创,转载时请注明作者和原文链接,谢谢。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

即将到来的场景时代

即将到来的场景时代

罗伯特•斯考伯、谢尔•伊斯雷尔 / 赵乾坤 周宝曜 / 北京联合出版公司 / 2014-5-1 / 42

科技大神、全球科技创新领域最知名记者 罗伯特·斯考伯:“技术越了解你,就会为你提供越多好处!” 互联网的炒作点一个一个不停出现,大数据、3D打印、O2O等,无不宣扬要颠覆商业模式。但是,互联网进入移动时代,接下来到底会发生什么?移动互联网时代真正带来哪些改变?这具体会怎样影响我们每一个人的生活?商业真的会被颠覆?目前为止没有一本书给出答案。 《即将到来的场景时代》不是就一个炒作点大加谈......一起来看看 《即将到来的场景时代》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具