view src/test/MultiThreadTee.java @ 51:089bd4510538

add MultiThreadTee.java
author e085711
date Thu, 07 Jul 2011 20:31:41 +0900
parents
children 9250cacee347
line wrap: on
line source

package test;

import java.util.LinkedList;
import java.util.concurrent.SynchronousQueue;

public class MultiThreadTee {

	static class Parent extends Thread {
		LinkedList<SynchronousQueue<String>> clients = new LinkedList<SynchronousQueue<String>>();


		SynchronousQueue<String> accept() {

			SynchronousQueue<String> s = new SynchronousQueue<String>();
			clients.add(s);
			
			return s;

		
		}

		void put(String s) throws InterruptedException {
			for (SynchronousQueue<String> queue : clients) {
				queue.put(s);
				
			}
			
		}
		
	}


	
	static class Client extends Thread {
		Parent p;
		private SynchronousQueue<String> queue;
		
		
		
		
		public Client(Parent p2) {
			p = p2;
		}

		public void run() {
			queue = p.accept();

			String item;
//			while(!(item = queue.poll()).equals("") ) {
			while(true) {
				item = queue.poll();
				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();
		}

		
		
		
	}
}