Java Executor同时运行work1和顺序工作2

时间:2018-11-30 01:01:57

标签: java concurrency executorservice executor

我有一个名字列表

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
                ...

当线程提交完成时,我的声明将在我依次调用commit.get()作业时暂停

这不是我想要的。我不知道该怎么解决,请帮帮我

0 个答案:

没有答案