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ć.