Well you can do that with ArrayBlockingQueue of fixed size. The code will be more concise as you wont need `waitForChecking` (as `blockingQueue.take()` will block until an item is available in the queue) and you wont need `queueModificationLock` (as all operations on blockingQueue are synchronized).