Concurrency looks weird to me in this class. I think a simple volatile boolean would be enough instead of the semaphore, unless I'm missing something?