Threads Java

import java.util.concurrent.Exchanger;
class ExgrDemo {
  public static void main(String args[]) {
    Exchanger exgr = new Exchanger();
    new UseString(exgr);
    new MakeString(exgr);
  }
}
class MakeString implements Runnable {
  Exchanger ex;
  String str;
  MakeString(Exchanger c) {
    ex = c;
    str = new String();
    new Thread(this).start();
  }
  public void run() {
    char ch = 'A';
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 5; j++)
        str += (char) ch++;
      try {
        str = ex.exchange(str);
      } catch (InterruptedException exc) {
        System.out.println(exc);
      }
    }
  }
}
class UseString implements Runnable {
  Exchanger ex;
  String str;
  UseString(Exchanger c) {
    ex = c;
    new Thread(this).start();
  }
  public void run() {
    for (int i = 0; i < 3; i++) {
      try {
        str = ex.exchange(new String());
        System.out.println("Got: " + str);
      } catch (InterruptedException exc) {
        System.out.println(exc);
      }
    }
  }
}