package com.thread.perfect;
import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class PipedIo
{
public static void main(String[] args)
throws InterruptedException
{
Sender send = new Sender();
Receiver receiver = new Receiver(send);
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(send);
TimeUnit.MILLISECONDS.sleep(5);
exec.execute(receiver);
TimeUnit.MILLISECONDS.sleep(4);
exec.shutdownNow();
}
}
class Sender implements Runnable
{
private Random rand = new Random(47);
private PipedWriter out = new PipedWriter();
public PipedWriter getPipedWriter()
{
return out;
}
@Override
public void run()
{
try
{
while (true)
{
for (char c = 'A'; c <= 'z'; c++)
{
out.write(c);
System.out.println("____send : " + c);
TimeUnit.MILLISECONDS.sleep(rand.nextInt(5));
}
}
}
catch (IOException e)
{
System.out.println("Sender IOException---------------------------");
}
catch (InterruptedException e)
{
System.out.println("Sender InterruptedException---------------------------");
}
}
}
class Receiver implements Runnable
{
private PipedReader in;
public Receiver(Sender send)
{
try
{
in = new PipedReader(send.getPipedWriter());
}
catch (IOException e)
{
e.printStackTrace();
}
}
@Override
public void run()
{
try
{
while (true)
{
System.out.println("Read : " + (char)in.read() + " ,");
}
}
catch (IOException e)
{
System.out.println("Receiver IOException---------------------------");
}
}
}