Tag: 线程本地

当类已经暴露给线程池时,清理ThreadLocal资源真的是我的工作吗?

我使用ThreadLocal 在我的Java类中,我有时使用ThreadLocal作为避免不必要的对象创build的手段: @net.jcip.annotations.ThreadSafe public class DateSensitiveThing { private final Date then; public DateSensitiveThing(Date then) { this.then = then; } private static final ThreadLocal<Calendar> threadCal = new ThreadLocal<Calendar>() { @Override protected Calendar initialValue() { return new GregorianCalendar(); } }; public Date doCalc(int n) { Calendar c = threadCal.get(); c.setTime(this.then): // use n to mutate c return […]

线程本地和内存泄漏

在多个post中提到:不恰当的使用ThreadLocal导致内存泄漏。 我正在努力了解如何使用ThreadLocal发生内存泄漏。 我唯一的想法是如下: 一个Web服务器维护一个线程池(例如servlet)。 如果ThreadLocal中的variables没有被删除,这些线程可能会造成内存泄漏,因为线程不会死亡。 这种情况下没有提到“Perm Space”内存泄漏。 这是内存泄漏的唯一(主要)用例吗?

什么时候应该使用scala.util.DynamicVariable?

当我读到scalatra的源码时,发现有一些代码是这样的: protected val _response = new DynamicVariable[HttpServletResponse](null) protected val _request = new DynamicVariable[HttpServletRequest](null) 有一个名为DynamicVariable的有趣的类。 我已经看过这个类的文档,但是我不知道什么时候以及为什么要使用它。 它有一个通常使用的withValue() 。 如果我们不使用它,那么我们应该用什么代码来解决它解决的问题? (我是新来的Scala,如果你可以提供一些代码,这将是伟大的)

如何清理threadlocals

有没有人有一个例子如何做到这一点? 还是由垃圾收集器处理? 即时通讯使用tomcat6

为什么在Django中使用线程本地的不好?

我正在使用线程本地来存储当前的用户和请求对象。 这样,我可以轻松地从程序中的任何地方访问请求(例如dynamic表单),而无需传递它们。 为了在一个中间件中实现线程本地存储,我在Django站点上跟随了一个教程: http : //code.djangoproject.com/wiki/CookBookThreadlocalsAndUser?version=18 这个文件已被修改,以避免这种技术: http : //code.djangoproject.com/wiki/CookBookThreadlocalsAndUser?version=20 从文章: 从devise的angular度来看,threadlocals本质上是全局variables,受到全局variables通常所需的可移植性和可预测性的所有常见问题的影响。 更重要的是,从安全angular度来看,threadlocals构成了巨大的风险。 通过提供公开其他线程状态的数据存储,您可以为Web服务器中的一个线程提供一种方法,以便可能修改系统中另一个线程的状态。 如果线程本地数据包含对用户或其他authentication相关数据的描述,那么可以将该数据用作授权访问未授权用户的攻击的基础,或暴露用户的私人细节。 虽然有可能build立一个对这种攻击是安全的线程本地系统,但是防御起来要容易得多,并且build立一个不受此类漏洞影响的系统。 我明白为什么全局variables可能是坏的,但在这种情况下,我在自己的服务器上运行我自己的代码,所以我不能看到两个全局variables构成什么危险。 有人可以解释涉及的安全问题吗? 我问过许多人,如果他们读了这篇文章,知道我在使用线程本地程序,他们将如何破解我的应用程序,但没有人能够告诉我。 我开始怀疑,这是一个热衷于明确地通过对象的纯粹主义分子所持有的观点。

thread_local在C ++ 11中意味着什么?

我对C ++ 11中的thread_local的描述感到困惑。 我的理解是,每个线程都有一个函数中局部variables的唯一副本。 全局/静态variables可以被所有线程访问(可能使用locking同步访问)。 thread_localvariables对所有线程都是可见的,但是只能由定义它们的线程修改。 这是对的吗?