1、Thread.suspend(),Thread.resume(),Thread.stop()方法都已经废弃了,因为可能导致死锁。
2、抛出InterruptedException将导致中断标识位复位
3、多线程编程一定要注意阻塞语句,阻塞一定不能长久的阻塞,应该能被interrupt,否则则可能会永久的锁住线程。
4、ThreadPoolExecutor采取的都是Thread.interrupt()来结束线程。
5、结束线程的3种方式:(程序里面2和3都应该包含)
1、自己设置业务结束标志(一般使用volatile设置一个标志)
2、调用interrupt()来中断线程,被中断的线程如果处于可相应中断的阻塞状态(NIO),则能在InterruptedException里面结束
3、调用interrupt()来中断线程,被中断的线程不能响应中断异常
此时分为两种情况:1、线程处于阻塞状态
非NIO的IO操作 可以通过关闭IO底层资源来触发被中断线程响应IOException,然后在IOException里面通过Thread.interrupted()来判断是否被中断来结束
synchronized和Lock的加锁操作 怎么解决中断? Lock可以通过可中断的加锁方式,但是synchronized呢
2、非阻塞状态
通过Thread.interrupted()来判断是否被中断来结束
6、在处理线程结束的代码里需要使用try{}finally{}代码,具体的模板可以参见Thing in java.