Как обеспечить выполнение исполняемых файлов в последовательном порядке, используя фазер
У меня есть список исполняемых файлов, которые отправляются в Phaser для выполнения, но они не выполняются в порядке их вызова. Например, если я отправляю два запускаемых файла в фазер, он должен вывести "тестирование 0, тестирование 1", но иногда выводит "тестирование 1 тестирование 0".
Код здесь:
package org.rs464;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Phaser;
public class Test {
private static Runnable submit(int i) {
return () -> System.out.println("testing " + i);
}
public static void main(String[] args) throws InterruptedException {
final List<Runnable> tasks = new ArrayList<>();
for(int i = 0;i<2;i++)
tasks.add(submit(i));
new Test().runTasks(tasks);
}
void runTasks(List<Runnable> tasks) throws InterruptedException {
final Phaser phaser = new Phaser(1) {
protected boolean onAdvance(int phase, int registeredParties) {
return phase >= 1 || registeredParties == 0;
}
};
for (final Runnable task : tasks) {
phaser.register();
new Thread() {
public void run() {
phaser.arriveAndAwaitAdvance();
task.run();
}
}.start();
}
phaser.arriveAndDeregister();
}
}