44 lines
1.2 KiB
Java
44 lines
1.2 KiB
Java
package exercises.ex_y;
|
|
|
|
import exercises.Utils;
|
|
|
|
import java.util.concurrent.Phaser;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
public class Runner implements Runnable {
|
|
private static AtomicInteger nextId = new AtomicInteger(0);
|
|
private final int id;
|
|
private final int maxStep;
|
|
private final Phaser phaser;
|
|
|
|
public Runner(int maxStep, Phaser phaser) {
|
|
id = nextId.getAndIncrement();
|
|
this.maxStep = maxStep;
|
|
this.phaser = phaser;
|
|
phaser.register();
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
System.out.println(this + " is on the starting line");
|
|
phaser.arriveAndAwaitAdvance();
|
|
|
|
while (phaser.getPhase() <= this.maxStep) {
|
|
System.out.println(this + " started stage " + phaser.getPhase());
|
|
try {
|
|
Utils.randomSleep(1000, 5000);
|
|
} catch (InterruptedException e) {
|
|
break;
|
|
}
|
|
System.out.println(this + " finished stage " + phaser.getPhase());
|
|
phaser.arriveAndAwaitAdvance();
|
|
}
|
|
phaser.arriveAndDeregister();
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "Runner " + id;
|
|
}
|
|
}
|