Java中实现线程暂停的多种方法及其适用场景有哪些?
- 后端开发
- 2025-09-12
- 6
在Java中,有几种方法可以实现线程的暂停,使得线程在特定时间段内不执行任何操作,以下是一些常用的方法,以及它们的特点和实现方式。
使用sleep()方法
sleep()方法是Thread类提供的一个静态方法,可以让当前线程暂停执行指定的毫秒数,暂停期间,线程不会释放其占有的任何资源,只是不会执行任何操作。
示例代码:
public class SleepExample { public static void main(String[] args) { Thread thread = new Thread(() > { System.out.println("线程开始执行"); try { Thread.sleep(1000); // 暂停1秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程继续执行"); }); thread.start(); } }
特点:

- 简单易用
- 不会释放线程占有的资源
- 可以指定暂停的时间长度
使用yield()方法
yield()方法是Thread类提供的一个静态方法,它可以使当前线程暂停执行,并允许其他线程(如果有更高优先级)抢占CPU执行权。
示例代码:
public class YieldExample { public static void main(String[] args) { Thread thread = new Thread(() > { for (int i = 0; i < 10; i++) { System.out.println("线程执行 " + i); if (i % 2 == 0) { Thread.yield(); // 放弃CPU执行权 } } }); thread.start(); } }
特点:
- 简单易用
- 不会释放线程占有的资源
- 可以让其他线程抢占CPU执行权
使用wait()方法
wait()方法是Object类提供的一个实例方法,可以让当前线程暂停执行,直到其他线程调用该对象的notify()或notifyAll()方法。
示例代码:
public class WaitExample { public static void main(String[] args) { Object lock = new Object(); Thread thread = new Thread(() > { synchronized (lock) { System.out.println("线程1等待"); try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程1继续执行"); } }); thread.start(); } }
特点:
- 需要与其他线程配合使用
- 可以释放线程占有的资源
- 可以实现线程间的通信
使用join()方法
join()方法是Thread类提供的一个实例方法,可以让当前线程暂停执行,直到指定的线程结束。

示例代码:
public class JoinExample { public static void main(String[] args) { Thread thread = new Thread(() > { try { Thread.sleep(2000); // 暂停2秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("子线程执行完毕"); }); thread.start(); try { thread.join(); // 等待子线程结束 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程执行完毕"); } }
特点:
- 可以实现线程间的同步
- 可以等待其他线程执行完毕
- 可以释放线程占有的资源
FAQs
Q1:sleep()和wait()有什么区别?
A1:sleep()方法可以使当前线程暂停执行,但不会释放线程占有的资源,而wait()方法可以让当前线程暂停执行,并释放线程占有的资源,直到其他线程调用该对象的notify()或notifyAll()方法。
Q2:yield()方法有什么作用?
A2:yield()方法可以让当前线程暂停执行,并允许其他线程(如果有更高优先级)抢占CPU执行权,如果当前线程没有更高优先级的线程,那么它将立即恢复执行。
