【发布时间】:2015-03-30 09:21:38
【问题描述】:
我想编写一个代理来确保特定对象只在特定线程上使用,因此我需要持有对 Thread 对象的引用(正如 JavaDoc 所说的 id 可以重用)。这个引用会导致线程(不是 Thread 对象)在终止时没有被完全垃圾回收吗?
【问题讨论】:
-
这将导致
Thread不会被垃圾收集,并且所有对象都可以从它访问。 thread 是一个操作系统实体,根本不受垃圾收集的影响。你的问题没有意义。 -
我想我已经尽可能清楚了:有我自己的实例想要持有的
Thread类的实例(即Thread对象),并且有JVM线程(如调度概念)。前者暴露了操作后者的方法,但目前尚不清楚持有对前者的引用是否会阻止后者被完全垃圾回收(考虑到 ThreadLocals 和有关线程泄漏的经验)。 -
不仅你的问题听起来很奇怪,而且整个设计也很奇怪。为什么您认为应该只允许一个特定线程更新(读取、写入?)特定对象?我的意思是:那个对象的生命周期和那个“操作”线程不同吗?
-
@EddyG 我承认这是一个不寻常的模式。我使用的外部库有一个对象池,但是在代码库中的某处对象被过早地返回到池中,导致在多个线程上使用了一个非线程安全的对象。我想写一个代理来检测这种情况。当对象从池中取出时,代理应该存储对
currentThread的引用,如果调用线程与存储的Thread不同,则抛出。 -
我会说这是一个 JVM 特定的主题,其答案在 Java 标准中没有指定(查看 JVM 内部)