Nicer spheres; Leap 

I think you should do this check both before and after you acquire the lock.  In the current use case, you only have one consumer, so technically it's not necessary, but if multiple threads could call get() then you could have a race condition where two of them saw 'hasFrame' true before the lock was acquired.