线程结束的正确方式

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.

原文地址:https://www.cnblogs.com/YDDMAX/p/5223190.html