我们知道,线程ReferenceHandler负责将待处理的引用实例加入到ReferenceQueue中,请参见Reference$ReferenceHandler.run()中的以下代码:
如果等待队列为null,则该线程正在等待锁定;我的问题是,何时通知该线程?当挂起的实例被修改时吗?
public void run() {
for (;;) {
Reference r;
synchronized (lock) {
if (pending != null) {
r = pending;
Reference rn = r.next;
pending = (rn == r) ? null : rn;
r.next = r;
} else {
try {
lock.wait();
} catch (InterruptedException x) { }
continue;
}
}
// Fast path for cleaners
if (r instanceof Cleaner) {
((Cleaner)r).clean();
continue;
}
ReferenceQueue q = r.queue;
if (q != ReferenceQueue.NULL) q.enqueue(r);
}
}
}
如果等待队列为null,则该线程正在等待锁定;我的问题是,何时通知该线程?当挂起的实例被修改时吗?