Sleep vs yield in Java
Sleep and yield are two methods which are used to get CPU back from Thread to Thread Scheduler in java but they are completely different than each other. The major difference between Sleep vs yield is that sleep is more reliable than yield and it's advised to use sleep(1) instead of yield to relinquish CPU in multi-threaded Java application to give an opportunity to other threads to execute. In this Java tutorial, we will what are differences between yield and sleep in Java. But before seeing difference between sleep and Yield let's see some similarities between yield and sleep in Java
Similarities between Sleep and yield in Java
Here are some common things between sleep and yield method in Java programming :
1) Both yield and sleep are declared on java.lang.Thread class.
2) Both sleep() and yield() are static methods and operate on current thread. It doesn't matter which thread's object you used to call this method, both these methods will always operate on current thread.
3) Sleep as well as Yield is used to relinquish CPU from current thread, but at same time it doesn't release any lock held by the thread. If you also want to release locks along with releasing CPU, you should be using wait() method instead. See difference between sleep() and wait() method for more details.
Now let's see what are differences between Sleep and Yield in Java and what are best practices to use sleep and yield in Java multi-threaded program:
Difference between sleep and yield in Java

2) Thread.sleep() method doesn't cause currently executing thread to give up any monitors while sleeping.
3) Thread.sleep() method throws InterruptedExcepiton if another thread interrupt the sleeping thread, this is not the case with yiedl method.
That's all on difference between Sleep and Yield method in Java thread. In summary prefer sleep() over yield() method to relinquish CPU if you need to . Remember purpose of sleep() method is to pause the current thread, but it will not release any lock held by current thread. If you also want thread to release CPU as well as any lock held, consider using wait() method instead.
Further Learning
Multithreading and Parallel Computing in Java
Applying Concurrency and Multi-threading to Common Java Patterns
Java Concurrency in Practice - The Book
Java Concurrency in Practice Bundle by Heinz Kabutz
Further Learning
Multithreading and Parallel Computing in Java
Applying Concurrency and Multi-threading to Common Java Patterns
Java Concurrency in Practice - The Book
Java Concurrency in Practice Bundle by Heinz Kabutz
thanks, i did read some in similar in effective java 2nd edition. Then we can say that use thread.yield has no sense, or what situations can i use thread.yield ?
ReplyDelete@Junca, to be honest I have not seen real uses of Thread.yield(), in theory it did say that it will force Thread to relinquish CPU but there is no control who will get it.
Delete