首页 > Java > java教程 > 线程中断是 Java 中已弃用的'stop()”方法的更好替代方法吗?

线程中断是 Java 中已弃用的'stop()”方法的更好替代方法吗?

Barbara Streisand
发布: 2024-11-30 12:06:18
原创
524 人浏览过

Is Thread Interruption a Better Alternative to the Deprecated `stop()` Method in Java?

线程中断作为 Stop() 的替代方法

Java 中通常不鼓励使用“stop()”方法,因为它可能会导致导致意想不到的副作用。终止线程的另一种方法是通过中断。

线程中断

中断线程向其发出信号,表明它应该正常停止其执行。要中断线程,请调用其“interrupt()”方法。如果线程表现良好并且正确处理中断,它将在退出之前尝试完成当前任务。

示例实现

考虑以下代码:

Thread thread = new Thread(new Runnable() {

    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                Thread.sleep(5000);
                System.out.println("Hello World!");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                System.out.println("Thread interrupted");
            }
        }
    }
});
登录后复制

在此代码中,线程在循环内检查其中断状态。当中断时,它会抛出“InterruptedException”,该异常会被处理并再次设置线程的中断状态。然后线程退出循环并终止。

注意事项

  • 中断导致“sleep()”和“wait()”方法抛出“InterruptedException”立即。
  • 不需要单独的布尔标志来指示
  • 线程应该通过检查中断状态并捕获“InterruptedExceptions”来进行合作。
  • 在 catch 块中为当前线程设置中断标志通常是不必要的,除非其他线程需要知道发生了中断。

与“Thread#isAlive() 和Thread#interrupted()

  • "Thread#isAlive()" 检查线程是否仍在运行,而不是检查线程是否已被中断。
  • "Thread#interrupted( )”检查线程是否已被中断并清除中断标志。此方法不应该用于在未清除标志的情况下测试中断状态,因为它可能会导致意外行为。

以上是线程中断是 Java 中已弃用的'stop()”方法的更好替代方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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