This is a bit confusing - is the receivingThread assumed to be running user code or is the assumption that it's sleeping in the `Thread.sleep(` line? I think it would simplify things a lot if you could assume that `onStart` doesn't block. 

Also, could you have a condition variable here instead of using sleep/interruption?