Java面试题之多线程 讲下join,yield方法的作用,以及什么场合用它们?
在Java多线程编程中,join()
和yield()
是两个重要的方法,它们在不同的场合下有不同的作用。
join()
方法join()
方法是 Thread
类中的一个实例方法,用于等待一个线程完成。调用 join()
的线程会被阻塞,直到被调用的线程执行完毕。
join()
。例如,在一个主线程中启动多个子线程,并希望在所有子线程完成后再进行后续操作。class MyThread extends Thread {
public void run() {
System.out.println("Thread is running");
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
MyThread thread = new MyThread();
thread.start();
thread.join(); // 等待 thread 完成
System.out.println("Thread has finished");
}
}
yield()
方法yield()
方法也是 Thread
类中的一个静态方法,用于提示线程调度器当前线程愿意让出 CPU 的使用权。调用 yield()
的线程会从运行状态转为就绪状态,允许其他同优先级的线程获得执行机会。
yield()
。这通常用于优化 CPU 使用,尤其是在多线程竞争资源的情况下。class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " is running");
Thread.yield(); // 暂时让出 CPU
}
}
}
public class Main {
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
}
}
join()
用于等待一个线程完成,适合在需要确保某个线程执行完毕后再继续执行的场合。yield()
用于让当前线程放弃 CPU 使用权,适合在需要优化线程调度或资源竞争的场合。在实际开发中,合理使用这两个方法可以提高程序的效率和可读性。