【发布时间】:2012-06-25 17:17:53
【问题描述】:
我今天早上刚刚了解了 ThreadLocal。我读到它应该始终是最终的和静态的,例如:
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
(会话是一个休眠会话)
我的困惑是:因为它是静态的,它可用于 JVM 中的任何线程。然而,它会为每个访问它的线程保存本地信息吗?我正试图解决这个问题,所以如果不清楚,我深表歉意。应用程序中的每个线程都可以访问同一个 ThreadLocal 对象,但是 ThreadLocal 对象会存储每个线程本地的对象?
【问题讨论】:
-
小心在共享环境中部署的 Web 应用程序中使用它。本地线程将在所有上下文中泄漏,并且在取消部署后,本地线程中的引用将不会被垃圾收集。您需要在每次请求后手动删除数据。
-
看似矛盾。
ThreadLocal在每个线程中应该是唯一的,但静态对象在每个线程之间共享。正要问同样的问题。
标签: java thread-local