gpt4 book ai didi

java - 关于线程安全的困惑 - SimpleDateFormat 示例

转载 作者:IT老高 更新时间:2023-10-28 13:47:50 25 4
gpt4 key购买 nike

我有一个关于线程安全的问题。据我所知,SimpleDateFormat 不是线程安全的。我想知道如果我在我的 spring Controller 中使用它会产生什么效果:

private final static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd yyyy", Locale.US);

稍后在我的 Controller 功能中,我按如下方式使用它:

  try {
changedate = changedate.substring(0, 15);
calcDate = dateFormat.parse(changedate);
} catch (ParseException e2) {
logger.error("Date Parsing Problem", e2);
}

calcDate 然后被添加到我的模型对象中,并返回一个 ModelAndView。

那么这样使用会遇到什么样的问题呢?是否会简单地删除 static 关键字来解决任何问题,因为每个线程都将使用自己的 dateFormat 实例?任何关于线程安全的主题的澄清将不胜感激。

谢谢

最佳答案

SimpleDateFormat.parse() 使用名为 calendar 的实例变量从字符串构建日期。如果两个线程试图同时解析,calendar 变量会被破坏,你会得到错误的结果。

使变量不是静态的不一定有帮助,因为两个线程仍然可以使用同一个 Controller 。更好的解决方案是在每次解析日期时创建一个新的 DateFormat 对象,或者使用线程本地存储。更好的是,使用 JodaTime它具有线程安全的解析器。

关于java - 关于线程安全的困惑 - SimpleDateFormat 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com