Model Checking, Tla Plus, TLC, Java, Concurrency.
consuming thread needs to be blocked until there is data in the buffer. Conversely, if the buffer has finite capacity, producing threads must be suspended when the buffer is full. Instead of using one of the buffer implementations from java.util.concurrent, an unfortunate programmer once wrote the