基本上我想找出当前有多少线程正在使用该对象。 如果没有人在使用这个对象引用,那么我想销毁这个对象。
例子
User u = new User();
(here I have other code)
if (u is not used by any thread) {
u = null;
}
最佳答案
这个问题是基于对 Java 内存管理的基本误解。
将 null
赋值给一个变量不会破坏它之前引用的对象。它实际上 所做的是打破可能的许多路径(来自 Activity 变量的引用链)之一到使其“可访问”的对象。当不存在更多路径时,程序中的任何内容都无法访问(使用)该对象,并且有资格被垃圾收集。它何时真正消失由 JVM/垃圾收集器自行决定。
您试图在没有任何其他对象引用时让 User
对象“消失”。但这无论如何都会发生。您真正需要做的就是无条件地将 null
分配给 u
,这样this 变量就不会阻止 User 对象消失。
你能让 User
对象“现在”消失吗?好吧,答案很复杂,归结为:
- 你不能可靠地做到这一点,并且
- 你无法有效地做到这一点。
并回答问题标题中的问题。
Is there anyway to find out number of threads are using the object currently ?
没有。不是你说的那个意思。 JVM 甚至没有提供一种方法来找出有多少对象引用的 Activity 副本。 JVM 最接近提供此功能的是 SoftReference
和 WeakReference
类,它们可用于检测对象不再具有任何正常(强)引用。
但这不是解决您的“问题”所必需的。
关于java - 无论如何要找出当前正在使用该对象的线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14542486/