suspend()和resume()的使用

/ 多线程 / 没有评论 / 334浏览

有些时候我们希望线程可以自由的控制暂停与重新执行,来满足我们开发的需求,这时我们就要用到suspend()和resume()方法了。看下面的演示代码。

/**
* 消息生产者
*
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-13 16:31
* @since 1.0.0
*/
public class MessageServer implements Runnable {

@Override
public void run() {
for (int i = 1; i <= 5; i++) {
if (i % 5 == 0) {
Thread.currentThread().suspend();
}
System.out.println(String.format("i%s 线程:%s", i, Thread.currentThread().getName()));
}
}
}
/**
* 消息消费者
*
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-13 16:41
* @since 1.0.0
*/
public class MessageClient {
public static void main(String[] args) throws InterruptedException {
MessageServer messageServer = new MessageServer();
Thread thread = new Thread(messageServer);
thread.start();
Thread.sleep(1000);
for (int i = 5; i > 0; i--) {
System.out.println(String.format("倒计时:%s", i));
Thread.sleep(1000);
}
thread.resume();
}
}
i:1 线程:Thread-0
i:2 线程:Thread-0
i:3 线程:Thread-0
i:4 线程:Thread-0
倒计时:5
倒计时:4
倒计时:3
倒计时:2
倒计时:1
i:5 线程:Thread-0

我们看到当线程调用suspend()方法时,该线程确实暂停了执行,并且一直等待,直到该线程调用resume()方法时它才恢复执行。这里要注意,如果一个线程调用了suspend()方法而并没有调用resume()方法时,那么此线程会一直暂停,但程序并不会结束。所以此方法要慎重使用,防止遇到线程一直不结束等情况,事实上这两种方法已经过时了,Jdk已经不推荐使用了。