如何让一个正在执行的线程暂停?

2025-06-21 20:02:46

在 Java 中,可以通过以下几种方法让一个正在执行的线程暂停:

1. 使用 Thread.sleep(long millis): 这个方法可以让当前线程暂停指定的毫秒数。

try {

Thread.sleep(1000); // 暂停 1 秒

} catch (InterruptedException e) {

e.printStackTrace();

}

2. 使用 wait() 和 notify() : 在对象上调用 wait() 方法可以让当前线程等待,直到其他线程调用 notify() 或 notifyAll() 。

synchronized (obj) {

obj.wait(); // 当前线程在此等待,直到被唤醒

}

// 在其他线程中

synchronized (obj) {

obj.notify(); // 唤醒等待的线程

}

3.使用标志位: 通过设置一个标志位来控制线程的运行状态。例如,使用一个 volatile 变量来指示线程是否应该继续执行。

public class PausableThread extends Thread {

private volatile boolean running = true;

public void pause() {

running = false;

}

public void resume() {

running = true;

synchronized (this) {

notify(); // 唤醒线程

}

}

@Override

public void run() {

while (true) {

if (!running) {

synchronized (this) {

try {

wait(); // 等待被唤醒

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

// 执行任务

}

}

}

4.使用 java.util.concurrent 包中的工具 : 可以使用 CountDownLatch 、 Semaphore 等工具来控制线程的暂停和继续。

根据具体需求选择适合的方式来暂停线程。请注意,尽量避免使用 Thread.stop() 方法,因为它会强制终止线程,可能导致不一致的状态。

法国传奇前锋&世界杯单届进球纪录保持者方丹去世,享年89岁
王者荣耀限购皮肤及购买攻略”的解析