关于我以前的question,进一步讲,


与本地变量相比,使用ThreadLocals有什么缺点
如何实施
会话变量是ThreadLocals吗
是否有更多经常使用的ThreadLocals示例

最佳答案

我不确定我是否会称其为缺点,但您必须非常小心地正确清理ThreadLocals,因为您放置在其中的任何数据都会一直存在,只要线程存在就一直存在,除非将其明确删除。这在使用线程池重用线程的环境中尤其麻烦,因此除非正确清理,否则某些垃圾数据可能会附加到线程上。

实际上,ThreadLocals经常使用-主要由框架开发人员使用,因为它们允许在不更改方法签名的情况下将“上下文”附加到用户方法。例如,J2EE中的事务管理是通过ThreadLocals完成的-对当前打开的事务的引用始终附加到线程上,以便在使用数据库时,您将使用当前打开的事务自动访问它。如果没有ThreadLocal,则需要将这些引用作为方法参数传递。

这种用法还有许多其他示例。我不确定您要指的是什么会话变量,但是类似会话的数据通常会附加到ThreadLocal中。

关于实施-我不确定。我想我读到某个地方说它是在JVM内部以较低的级别实现的,以使性能非常快,因为今天有很多代码使用它。

关于java - ThreadLocal实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1492036/

10-09 06:19