加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – ThreadLocal;是不是每次创建变量的副本都一样?

发布时间:2020-12-15 04:50:51 所属栏目:Java 来源:网络整理
导读:我仍然对ThreadLocal的概念感到困惑.我已经阅读了 JavaDoc以及其他相关问题,但是使用的术语并没有对我有多大帮助. 我有点了解ThreadLocal,也就是说,每个线程都有自己的变量副本.那么……这怎么会让它与…每次构建新变量有所不同? 例如,使用DateFormatter作
我仍然对ThreadLocal的概念感到困惑.我已经阅读了 JavaDoc以及其他相关问题,但是使用的术语并没有对我有多大帮助.

我有点了解ThreadLocal,也就是说,每个线程都有自己的变量副本.那么……这怎么会让它与…每次构建新变量有所不同?

例如,使用DateFormatter作为示例:

public void convertDate(String date) 
{ 
    // Contruct new date formatter for every invocation of the method.
    DateFormatter df = new SimpleDateFormatter(...);
    ....
}

public void convertDate(String date) 
{ 
    // Getting date formatter from threadlocal.
    DateFormatter df = threadLocal.get();
    ....
}

如果第二个所做的只是返回变量的新副本,第一个与第二个有什么不同?

谢谢.

解决方法

ThreadLocal对象通常是静态的,这意味着它们在同一线程内的函数调用之间保留它们的值.

在第一个代码片段中,每次调用convertDate时,都会创建一个新的SimpleDateFormatter对象.在第二个片段中,每个线程创建一个SimpleDateFormatter对象.每次在同一个线程中调用convertDate时,get()方法都会返回相同的对象.

ThreadLocal对象在实现thread-local storage时很有用,这意味着为每个线程维护单独的变量实例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读