Как использовать, ожидают и уведомляют протокол с несколькими потоками

А именно, может кто-то говорить мне что не так с этой частью кода. Это должно запустить потоки, печать "Ввод потока - также.." 5 раз и затем ожидайте, до notifyAll () назван. Но, это случайным образом печатает "Ввод.." и "Сделанный.." и все еще заставляет ждать на других.

public class ThreadTest implements Runnable {
    private int num;
    private static Object obj = new Object();
    ThreadTest(int n) {
        num=n;
    }
    @Override
    public void run() {
        synchronized (obj) {
            try {
                System.out.println("Entering thread "+num);
                obj.wait();
                System.out.println("Done Thread "+num);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }   
        }   
    }   

    public static void main(String[] args) {
        Runnable tc;
        Thread t;
        for(int i=0;i<5;i++) {
            tc = new ThreadTest(i);
            t = new Thread(tc);
            t.start();
        }
        synchronized (obj) {
            obj.notifyAll();
        }
    }
}
6
задан figaro 30 July 2010 в 23:51
поделиться