暂停线程的执行 Java的线程模型是不支持线程的暂停的,虽然Thread有suspend和resume方法,但是现在已经是不推荐使用的方法了,但是实际上我们可以编写可暂停并恢复执行的线程应用,一个简单的例子为:
public class PausableJob extends Thread {
private boolean pause = false;
private int i;
public void run() {
for (; i < 50; i++) {
pauseJob();
doRealStepJob();
}
}
private void doRealStepJob() {
for (int j = 0; j < 100000; j++) {
System.currentTimeMillis();
}
System.out.println(i);
}
public synchronized void pause() {
pause = true;
}
public synchronized void restart() {
restart(false);
}
public synchronized void restart(boolean fromBegin) {
if (pause) {
if (fromBegin) {
i=0;
}
pause = false;
this.notify();
}
}
protected void pauseJob() {
if (pause) {
synchronized (this) {
try {
wait();
} catch (InterruptedException e) {
}
}
}
}
public static void main(String[] args) throws Exception {
PausableJob pausableJob = new PausableJob();
pausableJob.start();
Thread.sleep(100);
System.out.println("Pause it");
pausableJob.pause();
System.out.println("Restart it from pause");
pausableJob.restart();
Thread.sleep(100);
System.out.println("Pause it");
pausableJob.pause();
System.out.println("Restart it from start");
pausableJob.restart(true);
}
}
但是有一个问题是这个暂停的动作不是实时的,如果线程已经开始执行到某个状态,那么必须那一步完成后才会进入暂停状态。JDK新版本应该提供暂停/恢复的功能,只不过JDK5中采用的是新的线程模型,还没有研究过。