优雅的停止线程
发布日期:2021-05-07 09:11:22 浏览次数:20 分类:精选文章

本文共 1098 字,大约阅读时间需要 3 分钟。

Thread类的start()方法用于启动多线程,而stop()方法原先用于停止线程,但从Java 1.2版本开始已被废弃,因为它可能导致线程死锁。这一方法的缺陷使得开发者需要采用更加柔和的方式来停止线程。

实现线程的停止需要谨慎处理,直接调用stop()方法可能引发线程死锁。因此,建议通过检查某些标志变量来控制线程的运行状态。在Java中,开发者通常会创建一个标志变量,并在适当的时候将其设置为false,进而中止线程的执行。

以下是一个实现线程柔和停止的范例:

package multithreading;public class StopTheThread {    public static boolean flag = true;        public static void main(String[] args) {        new Thread(() -> {            long num = 0;            while (flag) {                try {                    Thread.sleep(50);                } catch (InterruptedException e) {                    e.printStackTrace();                }                System.out.println(Thread.currentThread().getName() + "正在运行" + num++);            }        }).start();                try {            Thread.sleep(200);        } catch (InterruptedException e) {            e.printStackTrace();        }        flag = false;    }}

在上述代码中,flag变量用于控制线程的运行状态。当flag被设置为false后,线程会在下次循环时检测到该变量的值并退出循环,从而停止执行。

需要注意的是,线程的停止不是立即生效,而是会等到线程执行到标志变量的检查语句时才会停止。这种方式虽然不是立即停止线程,但比直接调用stop()方法更加安全可靠。

如果需要更灵活地控制线程的停止,可以将标志变量的检查位置适当调整,或者根据具体需求设计更复杂的控制逻辑。

上一篇:后台守护线程
下一篇:多线程编程:生产者与消费者基本程序模型

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月08日 04时08分03秒