annotate src/myVncProxy/MulticastQueue.java @ 183:1f583d6e0d1a

modify MulticastQueue.java : method poll()
author e085711
date Tue, 25 Oct 2011 17:33:47 +0900
parents db5f735fd2b4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
56
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 package myVncProxy;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import java.util.concurrent.CountDownLatch;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 public class MulticastQueue<T>
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 Node<T> tail;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 public MulticastQueue()
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 tail = new Node<T>(null);
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 }
151
db5f735fd2b4 add xml-rpc.jar
e085711
parents: 111
diff changeset
14
56
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 public synchronized void put(T item)
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 Node<T> next = new Node<T>(item);
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 tail.set(next);
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 tail = next;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 }
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 public Client<T> newClient()
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 return new Client<T>(tail);
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 }
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 static class Client<T>
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 Node<T> node;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 Client(Node<T> tail)
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 node = tail;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 }
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
111
7e60020f0a72 multi cast queue poll
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
36 synchronized public T poll()
56
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 Node<T> next = null;
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
39 T item = null;
82
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
40 do {
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
41 try {
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
42 next = node.next();
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
43 }catch(InterruptedException _e){
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
44 continue;
82
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
45 }
183
1f583d6e0d1a modify MulticastQueue.java : method poll()
e085711
parents: 151
diff changeset
46 // item = node.getItem();
1f583d6e0d1a modify MulticastQueue.java : method poll()
e085711
parents: 151
diff changeset
47 item = next.getItem();
82
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
48 node = next;
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
49 } while ( item == null);
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
50 return item;
56
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 }
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
82
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
54 static class Node<T>
56
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 private T item;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 private Node<T> next;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 private CountDownLatch latch;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 public Node(T item)
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 this.item = item;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 this.next = null;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 latch = new CountDownLatch(1);
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 }
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
82
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
67 synchronized public T getItem() {
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
68 return item;
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
69 }
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
70
56
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 public void set(Node<T> next)
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 this.next = next;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 latch.countDown();
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 }
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 public Node<T> next() throws InterruptedException
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 {
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 latch.await();
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 return next;
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 }
82
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
82
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
83 synchronized public void clear() {
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
84 item = null;
0cbe556e2c54 remove item to reduce memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
85 }
56
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 }
b2604c5c6a25 add MulticastQueue.java
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 }