I looked into ByteBufferQueue, that uses a single lock and the impl is almost similar to this. I also tested this against the jsr166 BlockingQueue tests and they all seem to pass so I guess we should be good here.