微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我仍然对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时很有用,这意味着为每个线程维护单独的变量实例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐