InverseSemaphore.java
package org.heigit.ors.fastisochrones.partitioning;
/**
* Based on https://stackoverflow.com/questions/4958330/java-executorservice-awaittermination-of-all-recursively-created-tasks/4958416#4958416
*/
public class InverseSemaphore {
private int value = 0;
private final Object lock = new Object();
public void beforeSubmit() {
synchronized (lock) {
value++;
}
}
public void taskCompleted() {
synchronized (lock) {
value--;
if (value == 0) lock.notifyAll();
}
}
public void awaitCompletion() throws InterruptedException {
synchronized (lock) {
while (value > 0) lock.wait();
}
}
}