Конечно, вы можете использовать CountDownLatch
, защищенный AtomicReference
, чтобы ваши задачи были обернуты следующим образом:
public class MyTask extends Runnable {
private final Runnable r;
public MyTask(Runnable r, AtomicReference<CountDownLatch> l) { this.r = r; }
public void run() {
r.run();
while (l.get() == null) Thread.sleep(1000L); //handle Interrupted
l.get().countDown();
}
}
Обратите внимание , что задачи выполняют свою работу, а затем вращайте , пока не будет установлен обратный отсчет (т. Е. Общее число задач известно). Как только обратный отсчет установлен, они начинают обратный отсчет и выходят. Они представлены следующим образом:
AtomicReference<CountDownLatch> l = new AtomicReference<CountDownLatch>();
executor.submit(new MyTask(r, l));
После точки создания / представления вашей работы , когда вы знаете, сколько задач вы создали :
latch.set(new CountDownLatch(nTasks));
latch.get().await();