51
|
1 package test;
|
|
2
|
|
3 import java.util.LinkedList;
|
53
|
4 import java.util.concurrent.BlockingQueue;
|
|
5 import java.util.concurrent.LinkedBlockingQueue;
|
51
|
6 import java.util.concurrent.SynchronousQueue;
|
|
7
|
|
8 public class MultiThreadTee {
|
|
9
|
|
10 static class Parent extends Thread {
|
53
|
11 LinkedList<BlockingQueue<String>> clients = new LinkedList<BlockingQueue<String>>();
|
51
|
12
|
|
13
|
53
|
14 BlockingQueue<String> accept() {
|
51
|
15
|
53
|
16 // BlockingQueue<String> s = new LinkedBlockingQueue<String>();
|
|
17 BlockingQueue<String> s = new SynchronousQueue<String>();
|
51
|
18 clients.add(s);
|
|
19
|
|
20 return s;
|
|
21
|
|
22
|
|
23 }
|
|
24
|
|
25 void put(String s) throws InterruptedException {
|
53
|
26 for (BlockingQueue<String> queue : clients) {
|
51
|
27 queue.put(s);
|
|
28
|
|
29 }
|
|
30
|
|
31 }
|
|
32
|
|
33 }
|
|
34
|
|
35
|
|
36
|
|
37 static class Client extends Thread {
|
|
38 Parent p;
|
53
|
39 private BlockingQueue<String> queue;
|
51
|
40
|
|
41
|
|
42
|
|
43
|
|
44 public Client(Parent p2) {
|
|
45 p = p2;
|
|
46 }
|
|
47
|
|
48 public void run() {
|
|
49 queue = p.accept();
|
|
50
|
|
51 String item;
|
|
52 // while(!(item = queue.poll()).equals("") ) {
|
|
53 while(true) {
|
53
|
54 try {
|
|
55 item = queue.take();
|
|
56 } catch (InterruptedException e) {
|
|
57 // TODO Auto-generated catch block
|
|
58 // System.out.println("wating");
|
|
59 continue;
|
|
60 }
|
|
61 // if(item == null) continue;
|
51
|
62 if(item.equals("")) return;
|
|
63 System.out.println(item);
|
|
64 }
|
|
65 }
|
|
66
|
|
67 }
|
|
68
|
|
69 static public void main (String[] argv) throws InterruptedException {
|
|
70 int num = 3;
|
|
71 Parent p = new Parent();
|
|
72 Client[] cs = new Client[num];
|
|
73 for (int i=0; i < num; i++ ) {
|
|
74 cs[i] = new Client(p);
|
|
75 }
|
|
76
|
|
77 p.start();
|
|
78 for (int i = 0; i < num; i++) {
|
|
79 cs[i].start();
|
|
80 }
|
|
81 p.put("TEST1");
|
|
82 p.put("TEST2");
|
|
83 p.put("TEST3");
|
|
84 p.put("");
|
|
85
|
|
86 p.join();
|
|
87 for (int i = 0; i < num; i++) {
|
|
88 cs[i].join();
|
|
89 }
|
|
90
|
|
91
|
|
92
|
|
93
|
|
94 }
|
|
95 }
|
|
96
|