Interrupting or stopping a sleeping thread
如何停止或中断Java中的睡眠线程?我有一个线程在run()方法中同步数据并休眠10分钟,如果我想在线程休眠时通过停止线程来停止同步。如何实现这一目标?
在线程上调用interrupt()方法。这将导致取消睡眠,并引发InterruptedException。
您可以使用
或者,您可以让线程等待超时通知对象,而不是休眠,并简化通知对象(如果您希望线程唤醒)。
当然,我想关注一个问题。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,你可以继续阅读。
既然我不能发表评论,我会再发表一个答案。我只是想加强和澄清亚历山大所说的话。
我可以通过实现自己的中断标志来修复我的程序,它不能被