java 线程 暂停_如何实现Java线程的暂停和重新启用?
时间: 2023-12-29 21:08:29 浏览: 94
java经典面试题4
在Java中,我们可以使用wait()和notify()方法来实现线程的暂停和重新启用。
wait()方法会使当前线程暂停,并且释放对象的锁,使得其他线程可以访问这个对象。在调用wait()方法前,线程必须获得该对象的锁,否则会抛出IllegalMonitorStateException异常。
notify()方法会唤醒一个等待该对象的锁的线程,使它从wait()方法返回。如果有多个线程等待该对象的锁,则只会唤醒其中一个线程。
以下是一个简单的例子,演示了如何使用wait()和notify()方法来实现线程的暂停和重新启用:
```java
class MyThread extends Thread {
private boolean pause = false;
private Object lock = new Object();
public void pauseThread() {
pause = true;
}
public void resumeThread() {
pause = false;
synchronized(lock) {
lock.notify();
}
}
public void run() {
while(true) {
// 检查是否暂停
synchronized(lock) {
while(pause) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 执行任务
}
}
}
```
在上面的例子中,我们创建了一个MyThread类,该类包含了pauseThread()和resumeThread()方法,用来暂停和重新启用线程。在run()方法中,我们使用wait()方法实现了线程的暂停,使用notify()方法实现了线程的重新启用。注意,在使用wait()和notify()方法时,一定要加锁,否则会抛出IllegalMonitorStateException异常。
阅读全文