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