Does thread.yield() lose the lock on object if called inside a synchronized method?

java, multithreading, sleep, synchronization, yield

Solution

No. `Thread.yield()` is not like `Object.wait()`. It just gives up control to allow a thread switch. It will have no effect on the concurrency of your program.

There is no guarantee which thread the scheduler will run after a yield.

Problem

I understand that `Thread.currentThread().yield()` is a notification to thread scheduler that it may assign cpu cycle to some other thread of same priority if any such is present. My question is: If current thread has got lock on some object and calls `yield()`, will it loses that lock right away? And when thread scheduler finds out there is no such thread to assign cpu cycle, then the thread which has called `yield()` will again be in fight to get lock on the object which it has lost earlier?? I couldn't find it in javadoc and forums [http://www.coderanch.com/t/226223/java-programmer-SCJP/certification/does-sleep-yield-release-lock] have 50-50 answers. I think `yield()` (lets say thread1) should release lock because if some thread (lets say thread2) of same priority wants to operate on same object, then it can have chance when thread scheduler eventually assign cup to thread2.

Original source