线程状态

挂起,恢复和停止

下面的代码演示了如何模拟Thread类中的stop(),suspend()和resume()方法。

public class Main extends Thread {
    private volatile boolean keepRunning = true;
    private boolean suspended = false;
    private synchronized void stopThread() {
        this.keepRunning = false;
        this.notify();
    }
    private synchronized void suspendThread() {
        this.suspended = true;
    }
    private synchronized void resumeThread() {
        this.suspended = false;
        this.notify();
    }
    public void run() {
        System.out.println("Thread started...");
        while (keepRunning) {
            try {
                System.out.println("Going to sleep...");
                Thread.sleep(1000);
                synchronized (this) {
                    while (suspended) {
                        System.out.println("Suspended...");
                        this.wait();
                        System.out.println("Resumed...");
                    }
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) throws Exception {
        Main t = new Main();
        t.start();
        Thread.sleep(5000);
        t.suspendThread(); // 挂起
        Thread.sleep(3000);
        t.resumeThread(); // 恢复
        Thread.sleep(2000);
        t.stopThread(); // 停止
    }
}

运行结果:

Thread started...
Going to sleep...
Going to sleep...
Going to sleep...
Going to sleep...
Going to sleep...
Suspended...
Resumed...
Going to sleep...
Going to sleep...

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress