
优雅的停止线程
发布日期: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()方法更加安全可靠。
如果需要更灵活地控制线程的停止,可以将标志变量的检查位置适当调整,或者根据具体需求设计更复杂的控制逻辑。