This might never get wip back to zero. Why not use the usual queue-drain pattern?

```java
if (wip.getAndIncrement() == 0) {
    do {
        queue.poll().action.call();
    } while (wip.decrementAndGet() > 0);
}
```