区分线程中的 interrupt() interrupted() isInterrupted()

来源:互联网 发布:建站域名如何备案知乎 编辑:程序博客网 时间:2024/05/18 03:29

区分线程中的 interrupt() interrupted() isInterrupted()

什么是中断

就是有比现在更重要的事情需要处理,需要暂时停下正在做的事情,立马去响应中断要做的事情,但是JAVA是虚拟机处理,并不会立马去响应处理中断,interrupt只是设置了一个中断标记,需要自己处理,也可以不处理,异常的话虚拟机会处理。

0.public boolean isInterrupted()

返回线程有没有中断标记,有就ture,没有就false。

1. public void interrupt()

修改线程中断标记为ture。但线程并不会立即中断,只是设置了一个标记。如果线程在睡眠中遇到中断请求,会抛出中断错误,怎么处理中 断错误,自己定义,不return的话,后面还会接着执行。当设置一个线程中断的时候,线程会有一个中断标记,当线程抛出一个中断异常的时候,表示处理了一个中断,JVM会把这个线程的中断标记改为false,如果不处理,标记会一直在。JVM修改的需要时间,立即判断可能JVM还没有改成功。此方法,可以自己调用,也可以线程对象自己相互调用。

2.public static boolean interrupted()

注意是一个静态方法,不依赖某一个线程对象此方法虽然线程对象之间都可以调用,但是只针对当前线程起作用,不管是通过那个对象调用的。如果当前线程存在中断,返回ture,并且修改标记为false。再调用isIterruoted()会返回false。如果当前线程没有中断标记,返回false,不会修改中断标记。
0 0