yield
Thread.yield()是Java中的一个静态方法,作用是:当前线程主动让出CPU的执行权,
把执行机会交给同等优先级的其他线程(并不一定真的会让出执行权,取决于操作系统调度器实现,有可能会重新得到CPU的执行权)。
调用后,当前线程就从运行状态变为就绪状态,等待线程调度器重新调度,但是不会阻塞线程也不会释放锁资源。
下面的案例中,a、b两个线程有可能会交替执行,也有可能不会交替执行。
public class YieldTest {
public static void main(String[] args) {
new Thread(()->{
String name = Thread.currentThread().getName();
for (int i = 0; i < 10; i++) {
System.out.println("thread name is:"+name);
Thread.yield();
}
},"thread a").start();
new Thread(()->{
String name = Thread.currentThread().getName();
for (int i = 0; i < 10; i++) {
System.out.println("thread name is:"+name);
Thread.yield();
}
},"thread b").start();
}
}
| 特性 | Thread.yield() |
Thread.sleep(ms) |
|---|---|---|
| 是否主动让出 CPU | ✅ 是 | ❌ 否(只是暂停自己) |
| 是否一定会让出 | ❌ 不一定 | ✅ 会暂停一段时间 |
| 是否释放锁 | ❌ 不释放锁 | ❌ 不释放锁 |
| 是否有时间限制 | ❌ 没有 | ✅ 有指定时长 |
| 是否会被中断 | ❌ 不会 | ✅ 可被中断抛出异常 |

浙公网安备 33010602011771号