首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的线程局部变量与局部变量

Java中的线程局部变量与局部变量
EN

Stack Overflow用户
提问于 2015-03-01 18:40:00
回答 3查看 1.4K关注 0票数 1

我们不能使用线程安全的局部变量来代替ThreadLocal吗?以及使用ThreadLocal的地方。请列举一些实际应用的例子。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-01 18:47:36

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

代码语言:javascript
复制
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();
}

或者使用本地实例:

代码语言:javascript
复制
private void method() {
  SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
}

前者可以更有效率,而后者则更容易阅读和推理。

票数 4
EN

Stack Overflow用户

发布于 2015-03-02 19:26:40

局部变量只能在声明它的函数或块中使用,并且它在函数返回或块退出时停止存在。

当您想要静态数据时,可以使用ThreadLocal对象,通常是从static变量或单例对象的实例变量引用,但希望每个线程都有自己的副本。

票数 1
EN

Stack Overflow用户

发布于 2015-03-01 18:46:29

线程局部变量在不同的线程中有不同的实例。这使得每个线程都可以拥有独立于其他线程所看到的变量的视图。“平原”局部变量是一个实例,当以线程安全的方式访问时,在所有线程中都具有相同的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28797462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档