基本上我想知道目前有多少线程正在使用该对象。 如果没有人使用此对象引用,那么我想销毁此对象。
示例
User u = new User();
(here I have other code)
if (u is not used by any thread) {
u = null;
}
答案 0 :(得分:6)
此问题基于Java内存管理的基本误解。
将<{1}}分配给变量 NOT 会销毁之前引用的对象。 实际上所做的是将可能的许多路径(从实时变量的引用链)中断一个到使其“可达”的对象。当不再存在路径时,程序中的任何内容都无法访问(使用)该对象,并且符合条件的将被垃圾回收。当它实际消失时,由JVM /垃圾收集器自行决定。
当其他任何内容都没有引用时,你试图使null
对象“消失”。但无论如何,这种情况还是会发生的。您真正需要做的就是无条件地将User
分配给null
,以便此变量不会阻止User对象消失。
你能让u
对象现在消失吗?答案很复杂,归结为:
并回答问题标题中的问题。
有没有找到当前正在使用该对象的线程数?
没有。不是你的意思。 JVM甚至没有提供一种方法来找出Object的引用有多少活动副本。 JVM最接近提供此类的是User
和SoftReference
类,可用于检测对象不再具有对它的任何正常(强)引用。
但这不是解决你的“问题”所必需的。