Java Threads щафета
Здравей те,
имам малко въпросче отностно следната програма:
import java.util.Random;
class Athlete extends Thread {
private int num;
public Athlete(int num) {
this.num = num;
}
@Override
public void run() {
synchronized (RelaySim.relay) {
try {
RelaySim.relay.wait();
} catch (InterruptedException ex) {
}
System.out.println("Starting " + this.num);
try {
Thread.sleep(((new Random()).nextInt(3) + 9) * 1000);
} catch (InterruptedException ex) {
}
System.out.println("Finishing " + this.num);
RelaySim.relay.notify();
}
}
}
public class RelaySim {
public static final Object relay = new Object();
public static void main(String[] args) {
Athlete a[] = new Athlete[4];
for (int i = 0; i < 4; i++) {
a[i] = new Athlete(i);
a[i].start();
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
}
}
synchronized (relay) {
relay.notify();
}
}
}
Това е малка симулация на щафета. Целта е да се създадът 4 атлета който да бягат от 9 до 11 секунди да подадът щафетата на следващия атлет и така докато минат всички.
Атлетите трябва да са последователни първия на втория, втория на трения и т.н.
Единстеното решение за "последователността" което имам е Thread.sleep(1); след всеки старт на всяка нишка. Но не мисля че това решение като цяло е правилно. Ако някой може да ми предложи нещо по-подходящо ще съм много благодарен.
трябва да стане через синхронизиран блок и
public static final Object relay = new Object();
Иначе щях да пусна първия, първия втория и т.н.
Идеята е за се ползва синхронизиран блок , wait и notify.
Но този sleep хич не ми харесва там, но ако го няма освен че не са подредени се получава и deathlock