Java多线程编程核心技术(第3版)
上QQ阅读APP看书,第一时间看更新

1.12.1 方法suspend()与resume()的使用

创建测试项目suspend_resume_test,文件MyThread.java代码如下:


package mythread;

public class MyThread extends Thread {

private long i = 0;

public long getI() {
    return i;
}

public void setI(long i) {
    this.i = i;
}

@Override
public void run() {
    while (true) {
        i++;
    }
}

}

文件Run.java代码如下:


package test.run;

import mythread.MyThread;

public class Run {

public static void main(String[] args) {

    try {
        MyThread thread = new MyThread();
        thread.start();
        Thread.sleep(5000);
        // A段
        thread.suspend();
        System.out.println("A= " + System.currentTimeMillis() + " i="
            + thread.getI());
        Thread.sleep(5000);
        System.out.println("A= " + System.currentTimeMillis() + " i="
            + thread.getI());
        // B段
        thread.resume();
        Thread.sleep(5000);

        // C段
        thread.suspend();
        System.out.println("B= " + System.currentTimeMillis() + " i="
            + thread.getI());
        Thread.sleep(5000);
        System.out.println("B= " + System.currentTimeMillis() + " i="
            + thread.getI());
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

}

程序运行结果如图1-54所示。

图1-54 暂停与恢复的测试

stop()方法用于销毁线程对象,如果想继续运行线程,则必须使用start()重新启动线程,而suspend()方法用于让线程不再执行任务,线程对象并不销毁,只在当前所执行的代码处暂停,未来还可以恢复运行。

从控制台输出的时间上来看,线程的确被暂停了,而且还可以恢复成运行状态。