中断:
有软中断和硬中断之分。而硬中断多为外围设备引起而且发生多是随机的,故我们在这里只讨论java程序中的软中断,是可控的。
这里我必须要回答几个问题,然而是网上大多数文章没有回答的。
a)为什么使用中断?
b)何时使用中断?
c)中断和结束线程之间有什么关系?
d)中断是否就是结束线程?
a)在java中我们引入中断的目的是为了打断线程现在所处的某种状态,但是我们知道这种状态一定是阻塞状态;
b)上面已经说了是在线程阻塞的时候,我们想要改变它阻塞的状态,所以通常在线程sleep,wait,join的情况下我们可以使用中断;
c)由于中断可以捕获,通过这种方式我们可以结束线程;
d)中断不是结束线程,只不过发送了一个中断信号而已,线程要退出还要我们加上自己的结束线程的操作。
上面说了中断使用的情况也就是scope,那么也就说明了线程在某些情况是不可中断的,换句话说,是捕获不到中断信号的。
我们现在将中断分为两种情况:
可中断的阻塞和不可中断的阻塞
对于可中断的阻塞情况我们要怎么结束这样的线程呢?下面举个简单的例子;
四也是网上和书上讲到的对被加锁的块(synchronized方法和临界区)进行中断采用ReentrantLock可以捕获中断。