R H*_*R H 1 java concurrency multithreading
基本上我想知道当前有多少线程正在使用该对象.如果没有人使用此对象引用,那么我想销毁此对象.
例
User u = new User();
(here I have other code)
if (u is not used by any thread) {
u = null;
}
Run Code Online (Sandbox Code Playgroud)
本课题基于对Java内存管理的基本误解.
分配null给一个变量不会不摧毁它之前所引用的对象.它实际上做的是将可能的许多路径(从实时变量的引用链)中断一个到使其"可达"的对象.当不再存在路径时,程序中的任何内容都无法访问(使用)该对象,并且有资格进行垃圾回收.当它实际消失时,由JVM /垃圾收集器决定.
User当其他任何东西都没有引用时,你试图让对象"消失".但无论如何,这种情况还是会发生的.您真正需要做的就是无条件地分配null,u以便此变量不会阻止User对象消失.
你能让这个User物体"现在"消失吗?答案很复杂,归结为:
并回答问题标题中的问题.
反正有没有找出当前正在使用该对象的线程数?
不,不是你的意思.JVM甚至没有提供一种方法来找出Object的引用有多少活动副本.JVM提供的最接近的是可用于检测对象不再具有任何正常(强)引用的类SoftReference和WeakReference类.
但这不是解决你的"问题"所必需的.
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |