java - Java 中的线程局部变量与局部变量

标签 java multithreading

我们不能使用线程安全的局部变量而不是 ThreadLocal。 以及使用 ThreadLocal 的位置。请引用一些真实的应用例子。

最佳答案

一个典型的例子是SimpleDateFormat,它不是线程安全的。在多线程上下文中,有两个线程安全选项,其中包括:

private static ThreadLocal<SimpleDateFormat> fmtHolder = new ThreadLocal<SimpleDateFormat>() {
  @Override protected SimpleDateFormat initialValue() {
    return new SimpleDateFormat("dd/MM/yyyy");
  }
};

private void method() {
  SimpleDateFormat fmt = fmtHolder.get();
}

或使用本地实例:

private void method() {
  SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
}

前者效率更高,后者更易于阅读和推理。

关于java - Java 中的线程局部变量与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797462/

相关文章:

Java在两个线程之间共享一个变量

c++ - 如何在 MacOS 中设置线程名称

python - 如何使用 ZeroMQ 从父进程中的多个线程收集数据,同时保持解决方案尽可能简单且可扩展?

java - Android 的@hide 注解到底有什么作用?

multithreading - 授予对 std::mutex 的优先访问权

java - GQL 存在性查询 : Get vs. 键查询与实体查询

java - 需要创建一个对数字进行排序的java代码

linux - 如何在 Linux 上为 clone() 系统调用映射堆栈?

java - 拥有一个包含指向大多数对象的指针并通过它引用对象的类是一种不好的做法吗?

java - 我的 JscrollPane 没有滚动(垂直)整个图像,