SimpleDateFormat的线程安全问题

tka*_*rls 5 java thread-safety simpledateformat

我从程序员测试中得到了以下代码

private String formatDate(Date date)
{
  String result = "";
  //….
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  result = sdf.format(date);
  //…
  return result;
}
Run Code Online (Sandbox Code Playgroud)

以及多个线程一次使用该方法的附加信息.这有什么问题吗?

我的回答是,不,它应该没问题(假设//部分中没有其他任何内容).

我的动机是没有使用全局或类数据结构.日期作为参数从每个胎面传递,并且在方法内部仅使用局部变量和局部对象.因此,每个线程将获得并使用它自己的SimpleDateFormat类的对象实例.

但是,这不是测试中的"正确"答案."正确"的答案是SimpleDateFormat类不是线程安全的,因此需要同步对该对象的访问.

那么,我或解决方案是否正确?

Kai*_*Kai 8

你的答案是对的.SimpleDateFormat不是线程安全的,但是每个方法调用都会创建一个自己的实例,所以这没关系.如果SimpleDateFormat是一个实例变量,那么这将不是线程安全的(正如您所提到的).