千家信息网

java 停止线程

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,stop()已经过时.停止线程:run()方法结束。开启多线程运行,通常代码都是循环结构。只要控制住循环,就可以让run()结束,也就结束了线程。class StopThread implements
千家信息网最后更新 2025年02月08日java 停止线程

stop()已经过时.

停止线程:run()方法结束。

开启多线程运行,通常代码都是循环结构。

只要控制住循环,就可以让run()结束,也就结束了线程。

class StopThread implements Runnable {    private boolean flag = true;    @Override    public void run() {        while (flag) {            System.out.println(Thread.currentThread().getName() + "...run");        }    }    public void changeFlag() {        flag = false;    }}public class StopThreadDemo {    public static void main(String[] args) {        StopThread st = new StopThread();        Thread t1 = new Thread(st);        Thread t2 = new Thread(st);        t1.start();        t2.start();        int num = 0;        while (true) {            if (num++ == 60) {                st.changeFlag();                break;            }            System.out.println(Thread.currentThread().getName() + "......" + num);        }    }}

特殊情况:当线程处于冻结状态就不会读取到标记,那么线程也就不会结束。

当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除,强制让线程恢复到运行状态中来,这样就可以操作标记让线程结束。

Thread类中提供了该方法:interrupt();

class StopThread implements Runnable {    private boolean flag = true;    @Override    public synchronized void run() {        while (flag) {            try {                wait();            } catch (InterruptedException e) {                System.out.println(Thread.currentThread().getName() + "...Exception");                flag = false;            }            System.out.println(Thread.currentThread().getName() + "...run");        }    }    public void changeFlag() {        flag = false;    }}public class StopThreadDemo {    public static void main(String[] args) {        StopThread st = new StopThread();        Thread t1 = new Thread(st);        Thread t2 = new Thread(st);        t1.start();        t2.start();        int num = 0;        while (true) {            if (num++ == 60) {//                st.changeFlag();                t1.interrupt();                t2.interrupt();                break;            }            System.out.println(Thread.currentThread().getName() + "......" + num);        }        System.out.println("over");    }}
0