home *** CD-ROM | disk | FTP | other *** search
- package java.lang.ref;
-
- public class ReferenceQueue {
- static ReferenceQueue NULL = new Null((1)null);
- static ReferenceQueue ENQUEUED = new Null((1)null);
- private Lock lock = new Lock((1)null);
- private Reference head = null;
-
- boolean enqueue(Reference var1) {
- synchronized(var1) {
- if (var1.queue == ENQUEUED) {
- boolean var3 = false;
- return var3;
- } else {
- Lock var4 = this.lock;
- synchronized(var4) {
- var1.queue = ENQUEUED;
- var1.next = this.head == null ? var1 : this.head;
- this.head = var1;
- this.lock.notifyAll();
- boolean var5 = true;
- return var5;
- }
- }
- }
- }
-
- private Reference reallyPoll() {
- if (this.head != null) {
- Reference var1 = this.head;
- this.head = var1.next == var1 ? null : var1.next;
- var1.queue = NULL;
- var1.next = var1;
- return var1;
- } else {
- return null;
- }
- }
-
- public Reference poll() {
- Lock var1 = this.lock;
- synchronized(var1) {
- Reference var2 = this.reallyPoll();
- return var2;
- }
- }
-
- public Reference remove(long var1) throws IllegalArgumentException, InterruptedException {
- if (var1 < 0L) {
- throw new IllegalArgumentException("Negative timeout value");
- } else {
- Lock var3 = this.lock;
- synchronized(var3) {
- Reference var4 = this.reallyPoll();
- if (var4 != null) {
- return var4;
- } else {
- do {
- this.lock.wait(var1);
- var4 = this.reallyPoll();
- if (var4 != null) {
- return var4;
- }
- } while(var1 == 0L);
-
- Object var7 = null;
- return (Reference)var7;
- }
- }
- }
- }
-
- public Reference remove() throws InterruptedException {
- return this.remove(0L);
- }
- }
-