首页 > Java > java教程 > 正文

如何在不使用 stop() 的情况下安全地终止 Java 线程?

Patricia Arquette
发布: 2024-11-23 19:18:16
原创
787 人浏览过

How to Safely Terminate a Thread in Java Without Using `stop()`?

如何在不使用 stop() 的情况下终止线程

使用 stop() 方法终止线程可能会导致不可预测的行为。本文介绍了一种使用中断来终止线程的替代方法。

stop() 的替代方法

与 stop() 不同,中断会向线程发出信号以优雅地结束其执行。中断是通过Thread.interrupt()方法实现的。当线程被中断时,它将抛出 InterruptedException。

实现示例

考虑以下代码:

public class HelloWorld {

    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(new Runnable() {

            public void run() {
                try {
                    while (!Thread.currentThread().isInterrupted()) {
                        Thread.sleep(5000);
                        System.out.println("Hello World!");
                    }
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });
        thread.start();
        System.out.println("press enter to quit");
        System.in.read();
        thread.interrupt();
    }
}
登录后复制

在此示例中,线程像往常一样创建并启动。当用户按下 Enter 键时,主线程使用 thread.interrupt() 中断工作线程。工作线程通过抛出 InterruptedException 来处理中断,然后清除中断标志。由于线程在循环内检查中断,因此它最终会在完成当前迭代后结束执行。

注意事项

  • 中断可能会导致类似方法sleep() 和 wait() 抛出 InterruptedException。
  • 建议使用检查中断循环内的 Thread.currentThread().isInterrupted() 确保线程配合中断请求。
  • 在某些情况下,可能需要使用 Thread.currentThread( catch 块内的 ).interrupt()。

以上是如何在不使用 stop() 的情况下安全地终止 Java 线程?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板