Java, 多线程的问题。一个引用(比如命名为a)指向了内存中的一个实例对象,想“切段”这个对象与
Java,多线程的问题。一个引用(比如命名为a)指向了内存中的一个实例对象,想“切段”这个对象与其他引用之间的联系,即把所有指向这块内存空间的引用全部指向null。但由于...
Java, 多线程的问题。一个引用(比如命名为a)指向了内存中的一个实例对象,想“切段”这个对象与其他引用之间的联系,即把所有指向这块内存空间的引用全部指向null。但由于是多线程,实在无法穷举出所有指向这块内存空间的所有引用。这个该怎样办到?
展开
3个回答
展开全部
关键在于你为什么要去释放其他线程的引用?
假如其他线程正在使用这个对象,这样会导致其他线程的执行出错。因此如果其他线程必须使用这个对象,则应该由线程自己来管理这个引用,这就不会出现你所说的这种问题。
你说的问题可能会出现在高速缓存中。这里缓存可能是共用的,管理缓存的是单独的线程,使用缓存又是单独的线程。这时如果使用缓存的线程都释放了某个对象,这个对象就应该回收,但缓存中确实保存着这个对象的引用。此时你可以使用Java提供的弱引用机制:
java.lang.ref.WeakReference<T>来作为缓存的引用。当弱引用所引用的对象是弱引用到达的,则将改引用的对象放到回收队列中,访问缓存仍然会得到WeakReference,但此时从里面获取的对象就是null。要注意的是:你仍然需要对缓存中的WeakReference进行管理。
详细请自行搜索Java的引用机制。关键字:WeakReference、SoftReference、PhantomReference、ReferenceQueue
假如其他线程正在使用这个对象,这样会导致其他线程的执行出错。因此如果其他线程必须使用这个对象,则应该由线程自己来管理这个引用,这就不会出现你所说的这种问题。
你说的问题可能会出现在高速缓存中。这里缓存可能是共用的,管理缓存的是单独的线程,使用缓存又是单独的线程。这时如果使用缓存的线程都释放了某个对象,这个对象就应该回收,但缓存中确实保存着这个对象的引用。此时你可以使用Java提供的弱引用机制:
java.lang.ref.WeakReference<T>来作为缓存的引用。当弱引用所引用的对象是弱引用到达的,则将改引用的对象放到回收队列中,访问缓存仍然会得到WeakReference,但此时从里面获取的对象就是null。要注意的是:你仍然需要对缓存中的WeakReference进行管理。
详细请自行搜索Java的引用机制。关键字:WeakReference、SoftReference、PhantomReference、ReferenceQueue
展开全部
可以编写个自动 实现的软件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试用循环啊!在给一个变量记录有多少。
追问
怎么循环?问题是,你怎么知道哪些引用在指向那块内存?都不在同一个线程里!你怎么能知道要循环哪些量?
追答
java.util.concurrent包中的执行器(Executor)可以管理你创建的Thread对象。
影响任务行为的一种简单的方法是调用sleep(),这个会使任务终止执行给定的时间。(休眠)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询