上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()方法用于让线程不再执行任务,线程对象并不销毁,只在当前所执行的代码处暂停,未来还可以恢复运行。
从控制台输出的时间上来看,线程的确被暂停了,而且还可以恢复成运行状态。