java线程取消休眠_关于java:中断或停止休眠线程

本问题已经有最佳答案,请猛点这里访问。

如何停止或中断Java中的睡眠线程?我有一个线程在run()方法中同步数据并休眠10分钟,如果我想在线程休眠时通过停止线程来停止同步。如何实现这一目标?

确切的副本已经不存在了:-(

此问题是否应在作者删除副本后重新打开?

在线程上调用interrupt()方法。这将导致取消睡眠,并引发InterruptedException。

如果线程没有休眠,而我仍然想执行类似线程的操作,那该怎么办呢?

您可以使用Thread.interrupt()中断休眠线程。现在停止线程是不赞成的——如果线程持有某个对象的锁怎么办?(当时有一个Thread.stop(),但非常不鼓励)。

或者,您可以让线程等待超时通知对象,而不是休眠,并简化通知对象(如果您希望线程唤醒)。

当然,我想关注一个问题。interrupt()方法本身不中断线程。它只是通过将标志设置为true向线程发送中断请求。通常,线程应该处理取消/中断策略。它在Java的实践中被大量描述,第7.1节任务取消。

阻塞库方法,如thread.sleep和object.wait,尝试检测线程何时被中断并提前返回。它们通过清除中断状态和抛出中断异常来响应中断。

Frederik是对的:call thread.interrupt();我只是想警告您不要使用StUTE(),因为它是Java 1.1以来所禁止的。以及其他警告。我认为,如果您使用sleep()并希望中断线程,那么现在是考虑转移到wait()和notify()的好时机。有很多关于Java线程的教程,Java.Lang.Type的JavaDoc是足够好的,所以如果你不熟悉这些API,你可以继续阅读。

既然我不能发表评论,我会再发表一个答案。我只是想加强和澄清亚历山大所说的话。interrupt()只在Thread中设置一个标志,扩展的Thread或Runnable对象必须检查它是否被Thread.interrupted()中断,以便在中断时做它应该做的事情。

interrupt()也会停止wait()或sleep()的操作,但要注意这些方法会取消设置中断标志。因此,如果您在休眠/等待线程上调用interrupt(),它将停止休眠/等待,但不知道它被中断了,除非您捕获了异常,并且不会继续被中断。

我可以通过实现自己的中断标志来修复我的程序,它不能被sleep()和wait()方法覆盖。另外,要知道可以使用Thread.currentThread().interrupt()从内部中断线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值