线程的停止和中断

88 阅读1分钟

以下代码示例:t线程启动后不间断的对x,y自增。main线程睡眠3秒,然后t线程调用自己的stop(),停止线程isAlive()查看线程是否存活,如果线程死亡则while循环结束,打印x,y的值。打印的负数值不是重点,重点是,x,y的值不一样,这表示,stop方法会强制中断线程,这使得我们的程序不安全。

 

将stop()替换成interrupt()这个方法不会停止线程,只是修改线程自身的中断信号量为true,让用户自己根据信号量去判断线程是否要执行结束。在run()方法中,while的条件改为isInterrupted(),如果线程的中断信号量为true,则停止循环,但是循环内部的代码会执行结束。最后t线程结束后,x,y的值相同。

需要注意的是,在一些特殊情况下,interrupt()是不生效的,不会更改线程本身的中断信号量。

从结果看线程t线程的while循环并没有终止,但是捕获了一个InterruptedException

interrupted同样判断线程是否中断,如果中断返回true,没有中断返回false。但是无论线程是否是中断状态,它都会将线程的中断状态清除。