Java 中如何正确地结束一个线程执行?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1080个文字,预计阅读时间需要5分钟。
在Thread类中存在一个已被废弃的stop()方法,它能终止线程,但由于它不检查异常情况,直接强行终止线程,所以已被废弃。例如,当线程被停止后,还需要进行一些善后操作(如关闭外部资源)。
Thread类中有一个已经废弃的 stop() 方法,它可以终止线程,但由于它不管三七二十一,直接终止线程,所以被废弃了。比如,当线程被停止后还需要进行一些善后操作(如,关闭外部资源),使用这个方法就无能为力了。可以通过线程中断来实现线程终止。
首先来看一下Java线程中断的一些内容:
- Java平台为每个线程维护了一个布尔型的中断标记,可以通过下列方法获取该标记的值:
interrupt() 中断某个线程
isInterrupted() 返回该线程的中断标记
interrupted() 返回并重置该线程的中断标记(置为false)
- 中断仅是发起线程对目标线程的一种请求,也就是说,目标线程对这种请求可以相应,也可以忽略。
- Java标准库中与线程阻塞相关的方法对中断的相应方式都是抛出 InterruptedException 异常,并且按照惯例,抛出异常前都会重置中断标记为false,因此这些方法会清空线程的中断标记。
本文共计1080个文字,预计阅读时间需要5分钟。
在Thread类中存在一个已被废弃的stop()方法,它能终止线程,但由于它不检查异常情况,直接强行终止线程,所以已被废弃。例如,当线程被停止后,还需要进行一些善后操作(如关闭外部资源)。
Thread类中有一个已经废弃的 stop() 方法,它可以终止线程,但由于它不管三七二十一,直接终止线程,所以被废弃了。比如,当线程被停止后还需要进行一些善后操作(如,关闭外部资源),使用这个方法就无能为力了。可以通过线程中断来实现线程终止。
首先来看一下Java线程中断的一些内容:
- Java平台为每个线程维护了一个布尔型的中断标记,可以通过下列方法获取该标记的值:
interrupt() 中断某个线程
isInterrupted() 返回该线程的中断标记
interrupted() 返回并重置该线程的中断标记(置为false)
- 中断仅是发起线程对目标线程的一种请求,也就是说,目标线程对这种请求可以相应,也可以忽略。
- Java标准库中与线程阻塞相关的方法对中断的相应方式都是抛出 InterruptedException 异常,并且按照惯例,抛出异常前都会重置中断标记为false,因此这些方法会清空线程的中断标记。

