public class Pipeline { public static void main(String[] args) { System.out.println("\n\nCreating buffers of size 1 and 1\n"); QBuffer b1 = new QBuffer(1); QBuffer b2 = new QBuffer(1); Sink p1 = new Sink(b2); // create sink Middleman p2 = new Middleman(b1, b2); // create middleman Source p3 = new Source(b1); // create source p1.start(); p2.start(); p3.start(); // run three threads simultaneously try { p1.join(); p2.join(); p3.join(); } catch (InterruptedException e) { System.out.println("interrupted exception"); } System.out.println("\n\ncontrol returned to main after 1st run\n\n"); System.out.println("\n\nCreating buffers of size 4 and 2\n"); b1=new QBuffer(4); b2=new QBuffer(2); p3=new Source(b2); p2=new Middleman(b2,b1); p1=new Sink(b1); p1.start(); p2.start(); p3.start(); try { p1.join(); p2.join(); p3.join(); } catch (InterruptedException e) { System.out.println("interrupted exception"); } System.out.println("\n\ncontrol returned to main after 2nd run\n\n"); System.out.println("\n\nCreating buffers of size 2 and 4\n"); b1=new QBuffer(2); b2=new QBuffer(4); p3=new Source(b2); p2=new Middleman(b2,b1); p1=new Sink(b1); p1.start(); p2.start(); p3.start(); try { p1.join(); p2.join(); p3.join(); } catch (InterruptedException e) { System.out.println("interrupted exception"); } System.out.println("\n\ncontrol returned to main after 3rd run\n"); System.out.println("main exiting"); } }