当前位置: 首页 > 面试题库 >

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

松越
2023-03-14
问题内容

我对线程安全性有疑问。据我所知,SimpleDateFormat不是线程安全的。我想知道如果在spring控制器中以以下方式使用它会产生什么影响:

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

稍后在我的控制器功能中,我将其如下使用:

  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变量将变得混乱,并且您将得到错误的结果。

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



 类似资料:
  • 我是Android的新手,我对服务和线程的生命周期感到很困惑。 假设我有一个活动,它通过调用startService()在工作线程中启动服务。根据谷歌文档,即使调用组件被破坏,该服务也将无限期运行。 所以我的问题是:如果应用程序进程被完全销毁(退出并从后台堆栈中清理),服务是否仍在运行?UI线程是否仍在运行?如果是,这是否意味着即使其调用进程被破坏,线程也不一定会被终止?

  • 我有许多线程处理对象,其中我使用将数据库列映射到对象。 我知道在任何Java中都不是线程安全的。因此,我在中得到了一些不可预测的结果。例如,我在中也看到了。 下面是我的代码: 我的核心池大小约为20这个应用程序的最大约50。这些线程在某个时候可以处理数据库中大约100个交易记录。 使此日期格式化线程安全的最佳方法是什么?我应该使用FastDateFormat直接替换吗? 有没有更好的替代方法来确保

  • 因此,将此运算符放在链中的任何位置也会影响onnext/onerror/oncomplete信号的执行*上下文,从链的开始直到下一次出现{@link publishOn(Scheduler)publishOn} 这让我有点困惑,因为当处理链中没有指定任何时,线程名称的打印值为: 从线程single-scheduler-1中保存person-如预期 从线程线程-13查找人员 从线程线程-6查找人员

  • 当您可以调用递归方法而不是必须将递归方法设置为变量时,是否有一种简单的方法来理解? 例如... 只是调用递归函数遍历: self.recurse(node.left) self.recurse(node.right) 必须将递归函数设置为node。左和右。右: 节点。左=自我。递归(node.left) 节点。右=自我。递归(node.left) 另一个例子是删除bst中的一个节点,你必须将递归函

  • 1.首先,我想确认一下从编程的角度,我们有“静态类型检查”和“动态类型检查,对把? 2.一般情况下我们用typescript做静态类型检查,检查源码里面自定义数据类型,对把? 3.那么,我们做的所谓的动态类型检查是不是指的那些库,比如Joi,ajv什么的,比如你点击一个按钮,然后调这个库来检查一个obj的schema,如果类面的key value类型都能对的上,我们就通过,如果类型对不上,我们就报

  • setAuthentication方法和UsernamePasswordAuthenticationToken是如何工作的?我正在传递从令牌中提取的信息,即;以及构造函数中的userdetails、passowords和权限,但它验证的是“upat”?是否自动使用“”进行内部检查? 我知道这个问题有点冗长,但作为一个初学者,我正在努力理解它背后的机制,我已经对它进行了研究,但这种困惑并没有消失。请