Synchronizacja wątków

0

Witam.

Czy mógłby mi ktoś wyjaśnić jak to działa , nie bardzo rozumiem na jakiej zasadzie działa metoda notify().
Załóżmy ze chciałbym aby dwa wątki naprzemiennie się uruchamiały tzn.

wątek1 jakis kod wait()
watek2 jakis kod wait()
watek1 jakis kod wait()
...

jak to zrobic ??

0

Wait i notify nie służą do synchronizowania wątków. O ile jeszcze wait() można używać w blokach synchronizowanych do czekania to notify należy zastąpić odpowiednimi mechanizmami synchronizacji na przykład semaforami. W ostateczności jak lubisz sypiacy się kod polecam yield():

public class App {

	public static void main(String[] args) {
		Watek watek1 = new Watek("1");
		Watek watek2 = new Watek("2");
		watek1.start();
		watek2.start();
	}
}

class Watek extends Thread {

	public Watek(String name) {
		this.setName(name);
	}

	public void run() {
		while (true) {
			System.out.println("Jestem wątkiem " + getName());
			yield();
		}
	}
}
0

Jezus Maryja, Koziolek, co ty prawisz ze herezje? notify() nie sluzy do synchronizacji? Uzywac yield()? Matko boska...

0

dzieki za odpowiedz ale chodziło mi aby zrobic to za pomocą wait oraz notify .

0
public class Test {
public static void main(String... args) {
    Object lock = new Object();
    Thread a = new Thread(new MyRunnable(lock, "A"));
    Thread b = new Thread(new MyRunnable(lock, "B"));
    a.start();
    b.start();
}

}

class MyRunnable implements Runnable {

private Object lock;

private String msg;

public MyRunnable(Object lock, String msg) {
    this.lock = lock;
    this.msg = msg;
}

public void run() {
    while (true) {
        synchronized (lock) {
            System.out.println(msg);
            lock.notify();
            try {
                Thread.sleep(500);
                lock.wait();
            } catch (InterruptedException exc) {
                // ignore
            }
        }
    }
}

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1