为什么不推荐stop
主要它不释放锁资源,尤其暴力终止,可能会导致业务执行到一半,出现各种问题。
为什么使用interrupt方法
通常使用自带的方法,而不是使用自定义的业务标识,是因为interrupt能修改线程状态,java线程的终止,需要从runnable终止。如果仅仅使用自定义的终止标志,有可能还需要等待java调度资源。
二阶段终止模式(最常用,且推荐)
首先,try-catch语句中,如果代码走入catch块,会导致jvm清除线程的终止状态,所以凡是使用线程执行的任务中需要异常机制的,catch块中都需要写this.interrupt()来重置终止标志位。
第二点、为什么要在异常中写终止,不在最后写终止来确保,a是为了提高执行效率,b是因为异常捕获之后,不让后续有依赖关系的程序连续抛出异常。
第三点,由于任务的执行中很可能调用第三方库,第三方库自己捕获的异常是不一定会重置终止标志位的,所以一般还是会写一个自定义的业务终止标志,用while来包裹业务逻辑,if判断自定义标志来终止任务。
以上三点综合就是 二阶段终止模式。