SimpleDateFormat不要定义为static

简介: SimpleDateFormat 线程不安全,避免定义为 static,若需共享应加锁或使用 ThreadLocal。推荐使用 DateUtils 工具类。JDK8 中建议用 Instant、LocalDateTime 和 DateTimeFormatter,具有线程安全、不可变等优点,更简单高效。

SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为static,必须加锁,或者使用 DateUtils 工具类。
正例:注意线程安全,使用 DateUtils。亦推荐如下处理:
private static final ThreadLocal df = new ThreadLocal() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
说明:如果是 JDK8 的应用,可以使用 Instant 代替 Date,LocalDateTime 代替 Calendar,DateTimeFormatter 代替 SimpleDateFormat,官方给出的解释:simple beautiful strong immutable thread-safe。

相关文章
|
20小时前
|
Java
JDK
JDK配置需注意使用与公司统一的版本,避免因版本不一致导致兼容性问题,确保开发环境稳定,减少不必要的错误和调试成本。
|
17小时前
|
Java
SpringBoot--整合Logback,滚动记录+多文件
SpringBoot--整合Logback,滚动记录+多文件
|
18小时前
|
XML Java 数据格式
SpringBoot--无标题
被@Configuration标注的类会被Spring IOC容器识别为配置类,作用等同于applicationContext.xml配置文件。通过注解方式注册Bean,结合AnnotationConfigApplicationContext可启动容器并管理Bean。示例代码展示了配置类及Bean的加载过程,输出结果显示配置类与组件均被成功注册到容器中。
|
18小时前
SpringBoot--@Inherited
@Inherited用于注解,使子类继承父类中标记该注解的元数据;但仅适用于类继承,接口继承和实现均不继承注解。
|
18小时前
|
Java 数据库连接 Spring
MyBatis--常见配置
MyBatis配置优先级:方法参数 > resource/url属性 > properties元素内属性。支持多环境配置,通过environments指定默认环境和数据源,结合事务管理器(JDBC/MANAGED)管理事务,常用于多数据源场景,与Spring集成时由Spring接管事务管理。
|
18小时前
|
XML Java 数据格式
SpringBoot--@Configuration
被 @Configuration 标注的类视为Spring配置类,等同于XML配置文件。结合 @Bean 注册Bean,通过 AnnotationConfigApplicationContext 加载配置类,可启动IOC容器并管理Bean实例,实现基于Java的配置。
|
18小时前
|
SQL 关系型数据库 Java
MaBatis--分页
本文介绍了五种分页实现方式:MyBatis自带RowBounds内存分页、PageHelper插件分页、原生SQL分页、数组分页及拦截器分页。对比了逻辑分页与物理分页的优劣,指出大数据量下应优先选用物理分页,避免内存溢出,提升系统性能。
|
18小时前
|
Java 数据库连接 mybatis
MyBatis--映射关系
MyBatis中通过resultMap实现关联映射:一对一使用resultMap解决字段与属性不一致;一对多通过<collection>映射集合,如用户关联多个角色;多对一用<association>,如博客关联作者;多对多借助中间类,如用户与部门通过UserForDept建立双向关联。
|
19小时前
|
缓存 数据库
并发修改同一记录时需要加锁
推荐根据冲突概率选择锁策略:冲突小于20%时使用乐观锁,以version控制更新,重试不少于3次;否则采用悲观锁,可在应用层、缓存或数据库层加锁,确保数据一致性。
|
19小时前
|
存储 安全 Java
Java泛型类型擦除以及类型擦除带来的问题--泛型擦除引起的问题及解决方法
Java泛型在编译时先进行类型检查再擦除,类型检查针对引用而非对象。擦除后泛型转为原始类型,通过自动强转实现安全取值。多态中因擦除可能导致重写失效,编译器生成桥方法解决。泛型不支持基本类型,静态成员不能使用类的泛型参数,但泛型方法可独立定义类型。instanceof不适用泛型类型判断。