ThreadLocal 如何带参数进行初始化

2019-12-24 17:34:44 +08:00
 jzmws

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

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

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

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

那答案是不用这个类, 有很多更好用的替代类
lxk11153
2019-12-24 22:12:16 +08:00
CStarter
2019-12-25 00:37:38 +08:00
这个类用的时候直接 new,不要复用。
非要复用的话,自定义类继承 Threadlocal,定义自己的方法
hzgit
2019-12-25 11:43:08 +08:00
ThreadLocal 初始化:静态方法 withInitial
SimpleDateFormat 非线程安全:LocalDateTime/LocalDate/LocalTime

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/631937

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX