在 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() 方法,因为它会强制终止线程,可能导致不一致的状态。