java中如何停止(stop)一個線程

停止(stop)一個線程(靠著return, break,或異常手段)
馬克- to-win:馬克 java社區(qū):防盜版實名手機尾號: 73203。</span>
馬克-to-win:java的官方文檔說不要用stop方法來停止一個線程。因為stop方法太狠,太極端,會出現(xiàn)同步問題,使數(shù)據(jù)不一致。所以我們會通過設置標志,通過return, break,異常等手段來控制流程自然停止。



例:1.5.1-本章源碼
class MyThreadMark_to_win extends Thread{
    private boolean stop;
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (stop) {
                System.out.println("退出了");
                return;
            }
            try {
                Thread.sleep(200);
            } catch (Exception e) {
                e.printStackTrace();

            }
            System.out.println("i = " + i);
        }
    }

    public void setStop(boolean stop) {
        this.stop = stop;
    }
}




public class Test {
    public static void main(String[] args) {
        MyThreadMark_to_win mt = new MyThreadMark_to_win();
        mt.start();
        try {
            Thread.sleep(300);
        } catch (Exception e) {
        }
        mt.setStop(true);
    }
}

輸出結(jié)果:

i = 0
i = 1
退出了

后續(xù):

馬克-to-win:如上一節(jié)例子所說: 主線程和子線程同時開始運行,主線程睡了300毫秒以后,開始把子線程類成員stop給設成真。子線程睡了兩次200毫秒后正好趕上stop為真,就return了!因為沒有后續(xù)程序,這個線程就結(jié)束了。