Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 中断或停止睡眠线程_Java_Multithreading_Sleep - Fatal编程技术网

Java 中断或停止睡眠线程

Java 中断或停止睡眠线程,java,multithreading,sleep,Java,Multithreading,Sleep,如何在java中停止或中断休眠线程。?我有一个线程,在run()方法中同步数据并休眠10分钟,如果我想在线程休眠时停止同步。?如何实现这一点?在线程上调用interrupt()方法。这将导致睡眠被取消,并引发InterruptedException。您可以使用thread.interrupt()中断睡眠线程。现在停止线程是不推荐的-如果线程持有某个对象的锁怎么办?(有一个线程.stop(),但它非常不受鼓励) 或者,您可以让线程等待对象收到超时通知,而不是休眠,如果希望线程唤醒,则可以简化通知对

如何在java中停止或中断休眠线程。?我有一个线程,在run()方法中同步数据并休眠10分钟,如果我想在线程休眠时停止同步。?如何实现这一点?

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

您可以使用
thread.interrupt()
中断睡眠线程。现在停止线程是不推荐的-如果线程持有某个对象的锁怎么办?(有一个
线程.stop()
,但它非常不受鼓励)


或者,您可以让线程等待对象收到超时通知,而不是休眠,如果希望线程唤醒,则可以简化通知对象的过程。

Frederik是正确的:调用thread.interrupt(); 我只是想警告您不要使用stop(),因为它自java 1.1以来就已被弃用。
以及其他警告。我认为,如果您正在使用sleep()并希望中断线程,那么现在正是考虑移动到wait()和notify()的好时机。有很多关于java线程的教程,java.lang.Thread的javadoc已经足够好了,因此如果您不熟悉这些API,可以继续阅读。

Suresh,我希望注意一个问题。interrupt()方法本身不会中断线程。它只是通过将标志设置为true,向线程发送中断请求。通常,线程应该处理取消/中断策略。Java Concurrecy in Practice第7.1节“任务取消”对其进行了详细描述


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

因为我不能发表评论,我将发布另一个答案。我只想强调和澄清Alexandr所说的话
interrupt()
仅在
线程中设置一个标志,扩展的
线程
可运行
对象必须检查它是否已被
线程中断。interrupted()
执行中断时应该执行的操作

interrupt()。因此,如果您在睡眠/等待线程上调用
interrupt()
,它将停止睡眠/等待,但不会知道它被中断,除非您捕获了异常,并且不会继续被中断


我能够通过实现自己的中断标志来修复我的一个程序,而
sleep()
wait()
方法无法覆盖该中断标志。另外,要知道,您可以使用
thread.currentThread().interrupt()

从线程内部中断线程。确切的副本已经不存在了:-(既然作者删除了它的副本,这个问题是否应该重新打开?如果线程没有休眠,而我仍然想执行类似于thread.sleep的操作,该怎么办?