当前位置: 首页 > 网络应用技术

在Java多线程编程中停止线程的3种方法

时间:2023-03-07 19:38:01 网络应用技术

  上一篇文章介绍了线程的使用。在执行任务后的线程中,它也可以通过某些方法进行干预以停止其操作。插入线程意味着在完成线程处理之前结束其操作。

  以下三种终止线程的方法可以在Java中使用。

  使用出口徽标使线程正常出口,也就是说,当运行方法完成后线以结束时。

  执行运行方法时,线程将退出。但是有时运行方法将永远不会结束。如果您使用线程在服务器程序中收听客户端请求或其他需要循环的任务。在这种情况下,这些任务通常被放置在循环中,例如while周期。例如:

  Java物种提供了一个螺纹。STOP()方法来停止线程。尽管它确实可以停止正在运行的线程,但此方法是不安全的,并且已被放弃。当调用stop()方法时,java.lang.threaddeath threaddeath异常被抛出。官方文档说明了以下内容:

  此方法本质上是Unsafe.use thread.stop()以停止线程,从而导致已锁定的监视器(解锁)所有线程(解锁)(解锁)(由非前方线程解锁,因为它沿着堆栈扩展了)。任何受这些监视器保护的对象都处于不一致的状态,其他线程可能会看到不一致的对象(损坏的对象),这可能导致任何行为。

  通过这个想法,您可以发现停止方法中有一个删除行,表明停止方法已无效。如果停止停止线程可能无法通过某些清洁工作完成。另一个原因是“解锁”锁定对象,这会导致数据以不同的方式处理,并且发生数据不一致的问题。停止线程的停止方法非常暴力。因为JDK中标记为“已过期/无效”的stop()方法和方法,因此在功能方面存在缺陷。因此()方法。例如:

  由于停止方法结束了线程,因此上面的代码仅更新了用户名的值,并且密码的值未更新。

  中断()角色是中断此线程。请注意,此线程不一定是当前线程,而是由调用该方法的线程实例表示的线程。调用中断方法。线程将继续运行。

  线程类提供了中断的方法来测试当前线程是否中断,即检查中断的迹象,返回布尔值并清除中断状态。当调用第二个呼叫时,已清楚地调用了中断状态,因此它将返回false。

  IS中断的方法测试线程已中断,并且没有消除中断状态。

  这三种方法的摘要可以总结如下:

  例如:

  调用中断方法并不能真正结束线程,而是当前线程上的停止标记。

  thread.isin中断方法是检查是否已标记了Thread15是否已停止标记。

  线程中断的方法是检查主线程是否被标记。

  Interupted()和Isredreat()之间的独特区别在于,前者将读取并清除中断状态,而后者仅读取状态。

  测试当前螺纹是否已中断,并通过该方法清除螺纹中断的状态。如果该方法称为两个连续调用,则第二个呼叫将返回false。

  如果线程中有睡眠代码,无论您是否输入睡眠状态,如果您调用中断方法,将生成异常信息。例如:

  以上是关于如何停止Java中线程的三种方法。在Java中提供了没有机制以安全地停止线程。由于不安全,停止方法已被放弃。但是Java提供了中断机制,这是一种协作机制,可以允许一个线程以终止另一个线程的工作。此外,可以通过设置出口徽标来控制线程的执行。可以执行对线程变量状态的内部检查。可以控制外部更改变量值以停止执行。