Mercurial > hg > Members > nobuyasu > tightVNCProxy
view src/test/MultiThreadTee.java @ 175:ec3842bc0aeb
merge
author | Yu Taninari <you@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 24 Oct 2011 20:18:49 +0900 |
parents | a240b19b66f0 |
children |
line wrap: on
line source
package test; import java.util.LinkedList; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.SynchronousQueue; public class MultiThreadTee { static class Parent extends Thread { LinkedList<BlockingQueue<String>> clients = new LinkedList<BlockingQueue<String>>(); BlockingQueue<String> accept() { // BlockingQueue<String> s = new LinkedBlockingQueue<String>(); BlockingQueue<String> s = new SynchronousQueue<String>(); clients.add(s); return s; } void put(String s) throws InterruptedException { for (BlockingQueue<String> queue : clients) { queue.offer(s); } } } static class Client extends Thread { Parent p; private BlockingQueue<String> queue; public Client(Parent p2) { p = p2; } public void run() { queue = p.accept(); String item; // while(!(item = queue.poll()).equals("") ) { while(true) { try { item = queue.take(); } catch (InterruptedException e) { // TODO Auto-generated catch block // System.out.println("wating"); continue; } // if(item == null) continue; if(item.equals("")) return; System.out.println(item); } } } static public void main (String[] argv) throws InterruptedException { int num = 3; Parent p = new Parent(); Client[] cs = new Client[num]; for (int i=0; i < num; i++ ) { cs[i] = new Client(p); } p.start(); for (int i = 0; i < num; i++) { cs[i].start(); } p.put("TEST1"); p.put("TEST2"); p.put("TEST3"); p.put(""); p.join(); for (int i = 0; i < num; i++) { cs[i].join(); } } }