public class TestWaitAndNotify { public static void main(String[] args) { WaitThread t1 = new WaitThread("t1", 1, 2, 50, false); WaitThread t2 = new WaitThread("t2", 2, 2, 50, false); t1.start(); t2.start(); } } class MyLock {} class WaitThread extends Thread { private static MyLock lock = new MyLock(); private String name; private int init; private int delta; private int count; private boolean isLast; WaitThread(String name, int init, int delta, int count, boolean isLast) { this.name = name; this.init = init; this.delta = delta; this.count = count; this.isLast = isLast; } @Override public void run() { for (int i = 0, num = init; i < count; i++) { System.out.println(name + ": " + num); num += delta; if (isLast && i == count - 1) return; synchronized (lock) { lock.notify(); if (!isLast && i == count - 1) return; try { lock.wait(); } catch (Exception e) { e.printStackTrace(); } } } } }