Как обеспечить выполнение исполняемых файлов в последовательном порядке, используя фазер

У меня есть список исполняемых файлов, которые отправляются в 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();  

         }  
}

0 ответов

Другие вопросы по тегам