public class ThreadCom {
    
    public static void main(String[] args) {
        System.out.println("Watek glowny zaczyna dzialanie");
        
        TickTock tt = new TickTock();
        MyThread mt = new MyThread("tik", tt);
        MyThread mt1 = new MyThread("tok", tt);
        
        
    }
    
}
 public class MyThread implements Runnable {
    Thread thrd;
    TickTock tt0b;
    
    MyThread(String name, TickTock tt)
    {
        thrd = new Thread(this, name);
        thrd.start();
        tt0b = tt;
    }
    
    public void run()
    {
        for(int i = 0; i < 10; i++)
        {
            
            if(thrd.getName().compareTo("tik") == 0)
            {
                tt0b.tick(i);
            }
            else
            {
                tt0b.tock(i);
            }
            
        }
    }
    
}
 public class TickTock {
    
    synchronized void tick(int f)
    {
        if(f%2 == 0)
        {
            System.out.println("tik");
            notify();
        }
        else
            try
        {
            wait();
        }
        catch(InterruptedException exc)
        {
            
        }
    }
    
    synchronized void tock(int f)
    {
        if(f%2 == 1)
        {
            System.out.println("tok");
            notify();
        }
        else
            try
        {
            wait();
        }
        catch(InterruptedException exc)
        {
            
        }
        
    }
}

Pomysł zaczerpnięty z pewnej książki, ma wyświetlać na zmianę tik tok. Ogólnie jest tam gotowy kod, ale chciałem przetestować wait/notify samodzielnie. Program to symulacja zegara. Ale raz wyświetla wszystko tak jak powinien (10 razy tik tok), a przy kolejnej kompilacji zatrzymuje się powiedzmy na jednokrotnym wyświetleniu tik tok. Przy kolejnej kompilacji jeszcze inaczej. Ktoś wie gdzie leży problem ? Wygląda to tak jakby jeden z wątków czekał na sygnał od drugiego i nie mógł się doczekać.