V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jzmws
V2EX  ›  程序员

ThreadLocal 如何带参数进行初始化

  •  
  •   jzmws · 2019-12-24 17:34:44 +08:00 · 3258 次点击
    这是一个创建于 1556 天前的主题,其中的信息可能已经有所发展或是发生改变。

    SimpleDateFormat 非线程安全, 在阿里 Java 开发手册上推荐以下写法 ,可是这种写法参数是写固定的,而实际需要传入指定参数. 比如说只要显示年月日

    private ThreadLocal dateFormat = new ThreadLocal() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } };

    问题: 如何在调用或者初始化时候传入自定义参数.

    10 条回复    2019-12-25 11:43:08 +08:00
    Kaiv2
        1
    Kaiv2  
       2019-12-24 17:52:31 +08:00 via Android
    放到调用处啊
    twirain
        2
    twirain  
       2019-12-24 17:57:10 +08:00
    新建个类
    chendy
        3
    chendy  
       2019-12-24 18:26:23 +08:00
    format 是动态的,就不需要做这个 ThreadLocal 的优化了
    或者做多个 ThreadLocal 保存各种要用到的 format
    SoloCompany
        4
    SoloCompany  
       2019-12-24 21:29:01 +08:00
    SimpleDateFormat 不是线程安全的这没错
    问题是你为什么要重用他,不重用就不存在线程安全问题
    jenschen
        5
    jenschen  
       2019-12-24 21:44:33 +08:00 via iPhone
    ThreadLocal 是对每个线程复制一个值,来解决并发问题。直接用就可以了
    lxk11153
        6
    lxk11153  
       2019-12-24 22:09:12 +08:00
    org.apache.commons.lang3.time.FastDateFormat
    Raymon111111
        7
    Raymon111111  
       2019-12-24 22:11:33 +08:00
    如果是专门想解决 SimpleDateFormat 的问题

    那答案是不用这个类, 有很多更好用的替代类
    lxk11153
        8
    lxk11153  
       2019-12-24 22:12:16 +08:00
    CStarter
        9
    CStarter  
       2019-12-25 00:37:38 +08:00 via Android
    这个类用的时候直接 new,不要复用。
    非要复用的话,自定义类继承 Threadlocal,定义自己的方法
    hzgit
        10
    hzgit  
       2019-12-25 11:43:08 +08:00
    ThreadLocal 初始化:静态方法 withInitial
    SimpleDateFormat 非线程安全:LocalDateTime/LocalDate/LocalTime
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3066 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:36 · PVG 22:36 · LAX 07:36 · JFK 10:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.