I think that yield is pretty much equivalent to sleep(0). sleep(1) on the other hand is just a tiny bit more forceful - the JVM may not execute that thread for a full millisecond, so the JVM is more likely to actually find another thread to run in the meantime.
And to complete the answer to another part of the origianl question - neither sleep() nor yield() give up any locks held by the code. Usually you don't
want to have any locks to begin with when you call either of these methods - if you do, there's a good chance you're blocking another thread by going to sleep while holding a lock.
And no, this isn't really performance-related so much as thread-related - but at least there's
some crossover.