文档库 最新最全的文档下载
当前位置:文档库 › 如何让一个线程停下来

如何让一个线程停下来

如何让一个线程停下来
如何让一个线程停下来

1.停止线程可以用如下方法:

●使用stop方法。虽然它确实能够停止一个正在运行的线程,然而,这种方法很粗

暴,并且API中已不推荐使用。

●设置一个标志

●使用interrupted

2.设置一个标志:

这个方法有个缺点。如果线程正在sleep()呢?是不是没有机会轮询这个flag?

换句话说设置标志位没有办法让一个正在睡觉的线程停下来。

3.使用interrupted

上述设计一个标志位的写法没法让一个阻塞方法停下来。

阻塞方法可能因为等不到所等的事件而无法终止,因此令阻塞方法可取消就非常有用。

阻塞方法有这些

Thread.sleep() 和Object.wait()等

当所在的线程被调用了interrupt()方法,这些方法都会被打断,并抛出InterruptedException

Thread.sleep() 和Object.wait() 支持的中断机制就是这样一种取消机制;它允许一个线程请求另一个线程停止它正在做的事情。

4.设置线程的中断状态

每个线程都有一个与之相关联的Boolean 属性,用于表示线程的中断状态(interrupted status)。

中断状态初始时为false;当另一个线程通过调用Thread.interrupt() 中断一个线程时,通常,

线程代码可以轮询中断状态,以便停下来。

5.阻塞方法

中断状态初始时为false;当另一个线程通过调用Thread.interrupt() 中断一个线程时,如果那个线程在执行一个低级可中断阻塞方法,例如Thread.sleep()、Thread.join() 或Object.wait(),那么它将取消阻塞并抛出InterruptedException。

中断状态可以通过Thread.isInterrupted() 来读取,并且可以通过一个名为

Thread.interrupted() 的操作读取和清除。

6.保留证据

当一个阻塞方法检测到中断并抛出InterruptedException 时,它清除中断状态。

如果捕捉到InterruptedException但是不能重新抛出它,那么应该保留中断发生的证据,以便调用栈中更高层的代码(或者后续代码)能知道中断,并对中断作出响应。

如果知道线程正要退出的话,则可以生吞中断(即捕获异常后不做任何事情)

参考文章:

https://www.wendangku.net/doc/5a17835756.html,/developerworks/cn/java/j-jtp05236.html

相关文档