java多线程中断



java多线程中断。

1.java多线程的中断,可以用一个变量来标示,因为一般多线程都是带着循环的,比如:while(!stop)

当要停止线程的时候,就把stop设置为ture。

2.thread.interrupt()方法不回中断一个正在运行的线程,但是其会让线程退出阻塞状态。如果线程是在wait或者sleep或者是join状态的时候,会抛出一个interruptedException

3.如果线程处于阻塞状态的话,则其不会去检查程序的stop为true或者false:

如:
while(!stop) {

//阻塞到这儿了。。

}

这是即使在其他线程中改变了stop的值,while循环一眼不会结束,因为“线程阻塞到这儿了”,一直在那儿不动了,所以只是在把stop设置为ture后,要调用阻塞线程的interrupt()方法,让其退出阻塞,然后就又继续运行,这是判断stop的值,最后线程终止运行。。

4.如果是IO操作的时候发生了阻塞,这是如果interrupt的话,会发生:ClosedByInterruptException,而且java1.0以前的传统IO是关不掉的,这时候要用到该线程的socket的close方法来进行关闭,此时会抛出SocketException。但是能关闭。