That return statement is effectively a reading of asynchronously modified field. The reading and writing is elsewhere protected by locking on thread instance, except this one occurence. Moving 'return' statement into synchronized block ensures that it reads updated value. Don't be afraid of deadlock - wait() releases the lock and acquires it back when notified. Change-Id: I940c24c04a1a2d4508d14d11b6174ff4fb2ab7d5