java ReferenceQueue 源码分析

[url]http://my.oschina.net/nbsjk/blog/296830[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是ReferenceQueue源码分析ReferenceQueue是一个抽象类,其定义如下: ``` public abstract class ReferenceQueue<T> { static ReferenceQueue<Object> NULL = new Null<>(); static class Null<T> extends ReferenceQueue<T> { @SuppressWarnings("unchecked") public Reference<? extends T> poll() { return null; } public Reference<? extends T> remove(long timeout) throws IllegalArgumentException { throw new IllegalArgumentException(); } public Reference<? extends T> remove() { return null; } } ... } ``` ReferenceQueue类中只定义了一个静态的内部类Null,同时该类中也没有任何实例变量和实例方法。Null类实现了ReferenceQueue抽象类,并重写了父类中的三个方法。这三个方法分别是: - poll():从队列中获取并移除一个引用对象,如果队列为空则返回null。 - remove(long timeout):从队列中获取并移除一个引用对象,如果队列为空则等待指定的时间,如果在指定的时间内队列仍为空则返回null。 - remove():从队列中获取并移除一个引用对象,如果队列为空则一直等待,直到队列非空。 在Java中,我们可以使用ReferenceQueue来监控一个对象是否被垃圾回收。当一个对象被垃圾回收时,与该对象关联的引用对象将会被加入到ReferenceQueue中。通过使用ReferenceQueue,我们可以在另一个线程中对被回收的对象进行处理,执行一些必要的清理工作或者记录日志等操作。 在使用ReferenceQueue时,我们需要将要被监控的引用对象与ReferenceQueue关联起来,一般使用弱引用、软引用或虚引用来实现。例如,我们可以使用如下代码将一个对象obj与一个ReferenceQueue关联起来: ``` ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>(); WeakReference<Object> weakReference = new WeakReference<>(obj, referenceQueue); ``` 在这个示例中,我们使用了一个WeakReference来关联obj对象和referenceQueue,当obj对象被垃圾回收时,与obj关联的弱引用将会被加入到referenceQueue中。我们可以在另一个线程中通过调用referenceQueue.poll()方法来获取被回收的弱引用对象,从而进行必要的清理工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值