Thread.yield() 是 Java 中 Thread 类的一个静态方法,用于提示线程调度器当前线程愿意让出 CPU 资源,以便其他具有相同或更高优先级的线程有机会运行。不过,yield() 并不保证当前线程一定会暂停,具体行为取决于操作系统的线程调度策略。
1. yield() 的作用
- 提示调度器:
yield()向线程调度器发出信号,表示当前线程愿意让出 CPU 资源。 - 不保证暂停:调用
yield()后,当前线程可能会继续运行,也可能被暂停,具体取决于调度器的实现。 - 不释放锁:
yield()不会释放当前线程持有的锁。
2. 使用场景
- 协作式多任务处理:在需要多个线程协作完成任务时,
yield()可以让其他线程有机会运行。 - 性能优化:在某些情况下,使用
yield()可以减少线程竞争,提升整体性能。
3. 示例代码
public class YieldExample implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " is running - " + i);
if (i == 2) {
System.out.println(Thread.currentThread().getName() + " is yielding");
Thread.yield(); // 提示调度器当前线程愿意让出 CPU
}
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new YieldExample(), "Thread-1");
Thread t2 = new Thread(new YieldExample(), "Thread-2");
t1.start();
t2.start();
}
}
4. 输出示例
Thread-1 is running - 0
Thread-2 is running - 0
Thread-1 is running - 1
Thread-2 is running - 1
Thread-1 is running - 2
Thread-1 is yielding
Thread-2 is running - 2
Thread-2 is yielding
Thread-1 is running - 3
Thread-2 is running - 3
Thread-1 is running - 4
Thread-2 is running - 4
5. 注意事项
- 不可靠:
yield()的行为依赖于操作系统和 JVM 的实现,不能保证线程一定会暂停。 - 不替代同步机制:
yield()不能替代wait()、notify()或join()等线程同步机制

1622

被折叠的 条评论
为什么被折叠?



