import java.util.concurrent.*; public class TestExchanger { public static void main(String[] args) { Exchanger exchanger = new Exchanger<>(); ExecutorService executor = Executors.newCachedThreadPool(); executor.execute(new ExchangeThread(exchanger, "dog")); executor.execute(new ExchangeThread(exchanger, "cat")); executor.shutdown(); } } class ExchangeThread extends Thread { private Exchanger exchanger; private String obj; ExchangeThread(Exchanger exchanger, String obj) { this.exchanger = exchanger; this.obj = obj; } @Override public void run() { try { System.out.println("Give " + obj + " and get " + exchanger.exchange(obj)); } catch (Exception e) { e.printStackTrace(); } } }