Mercurial > hg > Applications > TightVNC_orginal
comparison src/main/java/ac/ryukyu/treevnc/MulticastQueue.java @ 3:e7ce2b2ffed8
add and modify files
author | Yu Taninari <you@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 24 Jul 2012 15:46:36 +0900 |
parents | |
children | b32668b8e83c |
comparison
equal
deleted
inserted
replaced
2:dca3bd61b830 | 3:e7ce2b2ffed8 |
---|---|
1 package ac.ryukyu.treevnc; | |
2 | |
3 import java.util.concurrent.CountDownLatch; | |
4 | |
5 public class MulticastQueue<T> | |
6 { | |
7 | |
8 Node<T> tail; | |
9 | |
10 public MulticastQueue() | |
11 { | |
12 tail = new Node<T>(null); | |
13 } | |
14 | |
15 public synchronized void put(T item) | |
16 { | |
17 Node<T> next = new Node<T>(item); | |
18 tail.set(next); | |
19 tail = next; | |
20 } | |
21 | |
22 public Client<T> newClient() | |
23 { | |
24 return new Client<T>(tail); | |
25 } | |
26 | |
27 static class Client<T> | |
28 { | |
29 Node<T> node; | |
30 | |
31 Client(Node<T> tail) | |
32 { | |
33 node = tail; | |
34 } | |
35 | |
36 synchronized public T poll() | |
37 { | |
38 Node<T> next = null; | |
39 T item = null; | |
40 do { | |
41 try { | |
42 next = node.next(); | |
43 }catch(InterruptedException _e){ | |
44 continue; | |
45 } | |
46 // item = node.getItem(); | |
47 item = next.getItem(); | |
48 node = next; | |
49 } while ( item == null); | |
50 return item; | |
51 } | |
52 } | |
53 | |
54 static class Node<T> | |
55 { | |
56 private T item; | |
57 private Node<T> next; | |
58 private CountDownLatch latch; | |
59 | |
60 public Node(T item) | |
61 { | |
62 this.item = item; | |
63 this.next = null; | |
64 latch = new CountDownLatch(1); | |
65 } | |
66 | |
67 synchronized public T getItem() { | |
68 return item; | |
69 } | |
70 | |
71 public void set(Node<T> next) | |
72 { | |
73 this.next = next; | |
74 latch.countDown(); | |
75 } | |
76 | |
77 public Node<T> next() throws InterruptedException | |
78 { | |
79 latch.await(); | |
80 return next; | |
81 } | |
82 | |
83 synchronized public void clear() { | |
84 item = null; | |
85 } | |
86 } | |
87 } |