import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class Squarer { private BlockingQueue in; private BlockingQueue out; Squarer(BlockingQueue request, BlockingQueue replies) { this.in = request; this.out = replies; } public void start() { new Thread(new Runnable() { public void run() { while(true) { try { int x = in.take(); int y = x*x; Thread.sleep(2000); System.out.println("OK, got it. Calculating.."); Thread.sleep(4000); out.put(new SquareResult(x,y)); } catch(InterruptedException e) { System.out.println("interrupted yo"); } } } }).start(); } } import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class SquareKaro { public static void main(String[] args) { BlockingQueue number = new LinkedBlockingQueue<>(); BlockingQueue result = new LinkedBlockingQueue<>(); Squarer mysquarer = new Squarer(number, result); mysquarer.start(); try { System.out.println("Hey another process, give me square of => 54"); number.put(54); System.out.println(result.take()); } catch(Exception e) { e.printStackTrace(); } } } public class SquareResult { private int input; private int output; public SquareResult(int in, int out) { this.input = in; this.output = out; } @Override public String toString() { return input +" ka square hai "+output; } }