多线程的线程中止

郎家岭伯爵 2022年05月09日 525次浏览

背景

多线程的线程中止。

实现

多线程的线程中止不建议使用JDK提供的stop()、destory()等已废弃的方法,建议使用一个标识位来中止线程的执行。

代码

注:

  • 主线程的循环次数尽可能的设置大一些才可以看到效果。否则主线程已经执行完毕,子线程仍未开始执行,这样看不到效果。具体视电脑性能而定。
package com.aac;

public class ThreadStop implements Runnable{

    //1.定义线程体使用的标识位
    private boolean flag = true;

    @Override
    public void run() {
        int j = 0 ;
        //2.线程体使用该标识
        while(flag){
            System.out.println("run...Thread..." + j++);
        }
    }

    //3.对外提供方法改变标识
    public void stop(){
        this.flag=false;
    }

    public static void main(String[] args) {
        ThreadStop testThread = new ThreadStop();
        new Thread(testThread).start();

        for (int i = 0; i < 5000; i++) {
            System.out.println("main..."+i);
            if (i == 4500){
                //调用stop()方法切换标识位,让线程中止
                testThread.stop();
                System.out.println("子线程中止了");
            }
        }
    }
}

效果

总结

多线程的中止需要注意:

  • 不推荐JDK提供的stop()、destory()方法,已废弃使用;
  • 推荐线程完成执行自动停止;
  • 当需要“手动中止”线程时,建议使用一个标识位进行中止线程(此博文案例)。