import java.io.*; public class Erast { static public void main(String args[]) { InputStreamReader in1 = new InputStreamReader(System.in); OutputStreamWriter out2 = new OutputStreamWriter(System.out); PipedReader in2 = new PipedReader(); PipedWriter out1 = new PipedWriter(); try { out1.connect(in2); } catch (IOException e) { System.out.println(e); } int initReadBufSize = 100; int initWriteBufSize = 100; // Generate is the class that implements the generate computation Generate compute = new Generate(); FilterImpl gen = new FilterImpl(in1, out1, initReadBufSize, initWriteBufSize, compute); // give the computation thread a hook back into the Filter compute.setFilter(gen); // Sieve is the class that implements the sieve computation Sieve s1 = new Sieve(); FilterImpl sieve = new FilterImpl(in2, out2, initReadBufSize, initWriteBufSize, s1); // give the computation thread a hook back into the Filter s1.setFilter(sieve); gen.startFilter(); sieve.startFilter(); } }