yield()方法:表示当前线程对象提示调度器自己愿意让出CPU资源,但是调度器可以自由忽略。
调用该方法后,线程对象处于就绪状态,所以完全有可能:某个线程调用yield()方法后,调度器又把它调度出来重新运行。
只是一种意愿,不保证行动。谁先执行还要由JVM决定。
在开发中一般不会用到该方法,只在调试或测试的时候用
sleep()和yield()的区别
- 都能是调用的线程放弃CPU,把运行机会给其他线程
- sleep()会给其他线程的运行机会,且不考虑优先级,但是yield()只会给同优先级或更高优先级的线程运行的机会(不一定能运行)
- 调用sleep()后,线程进入计时等待状态,而调用yield()后进入就绪状态(随时等待JVM的再次调用)