annotate src/test/MulticastQueue.java @ 120:5e3487f06e22

update AcceptClient.java
author Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
date Sun, 07 Aug 2011 05:51:12 +0900
parents 9250cacee347
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
1 package test;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
2
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
3 import java.io.BufferedReader;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
4 import java.io.IOException;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
5 import java.io.InputStreamReader;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
6 import java.util.concurrent.CountDownLatch;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
7
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
8 public class MulticastQueue<T>
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
9 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
10 public static void main(String args[]) throws IOException
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
11 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
12 int threads = 5;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
13 final MulticastQueue<String> queue = new MulticastQueue<String>();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
14
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
15 Runnable type2 = new Runnable(){
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
16
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
17 public void run()
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
18 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
19 Client<String> client = queue.newClient();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
20
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
21 for(;;){
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
22 String str = client.poll();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
23 try {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
24 Thread.sleep(10000);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
25 } catch (InterruptedException e) {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
26 // TODO Auto-generated catch block
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
27 e.printStackTrace();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
28 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
29 System.out.println(Thread.currentThread().getName()+":"+str);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
30 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
31 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
32 };
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
33
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
34 Runnable thread = new Runnable(){
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
35
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
36 public void run()
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
37 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
38 Client<String> client = queue.newClient();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
39
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
40 for(;;){
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
41 String str = client.poll();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
42 System.out.println(Thread.currentThread().getName()+":"+str);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
43 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
44 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
45 };
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
46
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
47 for(int i = 0;i < threads;i ++){
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
48 new Thread(thread).start();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
49 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
50 new Thread(type2).start();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
51
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
52 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
53 for(;;){
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
54 String str = br.readLine();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
55 queue.put(str);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
56 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
57 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
58
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
59
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
60 Node<T> tail;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
61
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
62 public MulticastQueue()
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
63 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
64 tail = new Node<T>(null);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
65 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
66
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
67 public synchronized void put(T item)
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
68 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
69 Node<T> next = new Node<T>(item);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
70 tail.set(next);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
71 tail = next;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
72 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
73
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
74 public Client<T> newClient()
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
75 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
76 return new Client<T>(tail);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
77 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
78
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
79 static class Client<T>
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
80 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
81 Node<T> node;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
82
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
83 Client(Node<T> tail)
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
84 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
85 node = tail;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
86 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
87
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
88 public T poll()
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
89 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
90 Node<T> next = null;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
91
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
92 try {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
93 next = node.next();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
94 }catch(InterruptedException _e){
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
95 _e.printStackTrace();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
96 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
97 node = next;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
98 return next.item;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
99 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
100 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
101
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
102 private static class Node<T>
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
103 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
104 private T item;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
105 private Node<T> next;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
106 private CountDownLatch latch;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
107
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
108 public Node(T item)
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
109 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
110 this.item = item;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
111 this.next = null;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
112 latch = new CountDownLatch(1);
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
113 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
114
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
115 public void set(Node<T> next)
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
116 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
117 this.next = next;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
118 latch.countDown();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
119 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
120
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
121 public Node<T> next() throws InterruptedException
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
122 {
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
123 latch.await();
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
124 return next;
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
125 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
126 }
6eb7d0c8f11d added MulticastQueue
k118585
parents:
diff changeset
127 }