Thread Java Tutorial

public class TestUnsynchronized {
  int taskID;
  public void doAction(int val) {
    print("entering doAction()");
    taskID = val;
    print("doAction() taskID " + taskID);
    try {
      Thread.sleep(4000);
    } catch (InterruptedException x) {
    }
    print("doAction() sleep after taskID " + taskID);
    print("leaving performATask()");
  }
  public static void print(String msg) {
    String threadName = Thread.currentThread().getName();
    System.out.println(threadName + ": " + msg);
  }
  public static void main(String[] args) throws Exception {
    final TestUnsynchronized tus = new TestUnsynchronized();
    Runnable runA = new Runnable() {
      public void run() {
        tus.doAction(3);
      }
    };
    Thread ta = new Thread(runA, "threadA");
    ta.start();
    Thread.sleep(2000);
    Runnable runB = new Runnable() {
      public void run() {
        tus.doAction(7);
      }
    };
    Thread tb = new Thread(runB, "threadB");
    tb.start();
  }
}