1.1.3 线程中止
不正确的线程中止 - Stop
- Stop:终止线程,并且清楚监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。
- Destroy:JDK未实现该方法。
正确的线程中止 - interrupt
- 如果目标线程在调用 Object class 的 wait()、wait(long) 或 wait(long,int) 方法、join()、join(long,int) 或 sleep(long,int) 方法时被阻塞,那么 Interrupt 会生效,该线程的中断状态将被清楚,抛出 InterruptedException 异常。(线程会退出sleep状态,将程序执行完毕,以保证数据的一致性,然后会抛出异常给开发者,让开发者决定后续怎么处理。)
- 如果目标线程是被 I/O 或者 NIO 中的 Channel 所阻塞,同样,I/O 操作会被中断或者返回特殊异常值。达到终止线程目的。
- 如果以上条件都不满足,则会设置此线程的中断状态。
正确的线程中止 - 标志位
- 代码逻辑中,添加一个判断,用来控制线程执行的中止。(如果业务逻辑中有合适的条件来做判断,且逻辑中有循环的话,很适合使用这种方式来优雅的中止线程。)