java 重启线程_如何在Java中启动/停止/重启线程?

本文探讨了在Java中如何管理和终止线程,尤其是当线程内部循环无法中断时的问题。通过示例展示了只有当线程内部检查并响应中断信号时才能安全停止执行。同时,提到了使用`Thread.stop()`方法的风险,因为它可能导致同步块的保护失效,破坏程序的稳定性。文章强调了确保线程能够自我检查中断状态以实现安全关闭的重要性,并提出了实现可重启线程的思路。
摘要由CSDN通过智能技术生成

6cb03e0c1c17139642203473c8badd74.png

慕容森

除非在该线程中运行的代码检查并允许终止,否则无法终止线程。你说:“可悲的是我必须杀死/重启它......我没有完全控制线程的内容,对于我的情况,它需要重新启动”如果线程的内容不允许终止其exectuion,那么你就无法终止该线程。在你的帖子中你说:“我的第一次尝试是使用ExecutorService,但我似乎找不到重启任务的方法。当我使用.shutdownnow()......”如果查看“shutdownnow”的来源,它只会运行并中断当前运行的线程。这不会停止执行,除非这些线程中的代码检查它是否已被打乱,如果是,则自行停止执行。因此,shutdownnow可能没有按照你的想法行事。让我说明当我说线程的内容必须允许该线程被终止时我的意思:myExecutor.execute(new Runnable() {

 public void run() {

  while (true) {

    System.out.println("running");

  }

 }

 });myExecutor.shutdownnow();该线程将继续运行,即使调用了shutdownnow,因为它永远不会检查它是否已被终止。但是,该线程将关闭:myExecutor.execute(new Runnable() {

 public void run() {

  while (!Thread.interrupted()) {

    System.out.println("running");

  }

 }

 });myExecutor.shutdownnow();由于该线程检查它是否已被中断/关闭/终止。因此,如果您想要一个可以关闭的线程,您需要确保它检查它是否已被中断。如果你想要一个可以“关闭”和“重新启动”的线程,你就可以创建一个可以执行前面提到的新任务的runnable。为什么不能关闭正在运行的线程?好吧,我实际上撒谎,你可以调用“yourThread.stop()”,但为什么这是一个坏主意?当你停止它时,线程可以处于同步(或其他关键部分,但我们将限制自己使用这里的同步关键字保护的部分)部分代码。synch块应该在它们的整数中执行,并且在被其他一些线程访问之前只能由一个线程执行。如果在同步块中间停止某个线程,则synch块保护的保护将失效,程序将进入未知状态。开发人员将内容置于同步块中以保持同步,如果使用threadInstance.stop()则会破坏同步的含义,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值