我有一个名字列表
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()作业时暂停
这不是我想要的。我不知道该怎么解决,请帮帮我