Java Executor работает одновременно work1 и последовательная работа2 - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть список имен

ArrayList<String> allPersion = new ArrayList<>();
allPersion.add("A");
allPersion.add("B");
... 
allPersion.add("E");

Все они работают на 1 и 2

private List<String> work1(String _item) {}
private void work2(String data) {}

Я создаю тему, которая позволяет двум людям работать одновременно

ExecutorService executor = Executors.newFixedThreadPool(2);
        allPersion.forEach((_item) -> {
            Future<List<String>> submit = executor.submit(() -> {
                return work1(_item);
            });
            try {
                for (String data : submit.get()) {
                    work2(data);
                }
            } catch (InterruptedException | ExecutionException ex) {
                Logger.getLogger(NewClass1.class.getName()).log(Level.SEVERE, null, ex);
            }
        });
        executor.shutdown();

Я хочу запрограммировать себя следующим образом

PersionA ->work1
PersionB ->work1
    ->If PersionA finishes work1 before PersionB
        +PersionA run work2
        +While allowing PersionC to run the work1
        +When PersionA finishes work 2
            ->If PersionC finishes work1 before PersionB
                ...

Мое утверждение, когда поток завершает выполнение, приостанавливается, когда я вызываю submit.get (), работа, выполняемая последовательно

Это не совсем то, что я хочу. Я не знаю, как решить это, пожалуйста, помогите мне

...