```html
如何在Java中停止或中断正在睡眠的线程?我有一个同步数据并在run()方法中休眠10分钟的线程,如果我想通过停止线程来停止同步,该怎么做?如何实现?
```如何在Java中停止或中断正在睡眠的线程?我有一个同步数据并在run()方法中休眠10分钟的线程,如果我想通过停止线程来停止同步,该怎么做?如何实现?
```在您的线程上调用interrupt()方法。这将导致睡眠被取消并抛出InterruptedException异常。
你可以使用Thread.interrupt()
中断一个休眠的线程。现在停止线程已经过时了——如果线程正在持有某个锁怎么办?(曾经有一个Thread.stop()
方法,但是它被强烈反对)。
或者,你可以让你的线程在等待一个对象被通知时设置超时时间,如果你想唤醒线程,就简单地通知这个对象。
由于我无法评论,所以我会发布另一个答案。我只想强调并澄清Alexandr所说的内容。 interrupt()
仅在 Thread
中设置标志,扩展的 Thread
或 Runnable
对象必须使用 Thread.interrupted()
检查是否已被中断,以执行其应在中断时执行的操作。
interrupt()
还可以停止 wait()
或 sleep()
,但要注意这些方法会取消中断标志。因此,如果您在正在睡眠/等待的线程上调用 interrupt()
,它将停止睡眠/等待,但不会知道它已被中断,除非您捕获异常,并且不会继续中断。
通过实现自己的中断标志,我能够修复我的一个程序,这个标志不能被 sleep()
和 wait()
方法覆盖。还要知道,您可以使用 Thread.currentThread().interrupt()
在内部中断线程。
Frederik是正确的:调用Thread.interrupt(); 我只是想警告你不要使用stop(),因为它自Java 1.1以来就已被弃用。 还有其他警告。如果您正在使用sleep()并希望中断线程,现在是考虑转移到wait()和notify()的好时机。有许多关于Java线程的教程,java.lang.Thread的javadoc也足够好,所以如果您对这些API不熟悉,可以继续阅读那里。