Why do we need to lock (this) as well? I see it that way: The thread goes into the first method -> locks the 'lock' mutex -> then goes to the second method and tries to go into the synchronize (lock) {} block but it can't because the 'lock' mutex was already acquired in the first method -> waits until it is released (which never happens) -> deadlock