
风吹过的记忆为您分享以下优质知识
在Java中,正确停止线程应优先使用协作式中断机制,避免使用强制终止方法。以下是推荐方案及注意事项:
一、推荐方案
通过共享的`volatile`变量控制线程状态,线程在每次循环检查标志位,及时响应中断请求。适用于无阻塞操作或循环任务。
```java
private volatile boolean running = true;
public void run() {
while (running) {
// 处理业务逻辑
}
closeDBConnection();
}
public void stopThread() {
running = false;
}
```
使用`Thread.interrupt()`方法(官方推荐)
通过中断标志通知线程停止,线程需在适当位置(如`sleep`、`wait`)检查`Thread.interrupted()`状态并响应中断。适用于含阻塞操作的场景。
```java
thread.interrupt();
// 线程内响应中断
if (Thread.interrupted()) {
throw new InterruptedException();
}
```
二、禁止使用的方法
`Thread.stop()`:
已废弃,直接强制终止线程,可能导致资源泄漏或数据不一致,不推荐使用。
三、其他注意事项
协作式终止:线程需主动检查中断状态,无法强制立即停止。若线程处于`wait`、`sleep`等阻塞状态,需配合中断机制处理。
优雅关闭:使用`ExecutorService`时,推荐调用`shutdown()`方法,等待所有任务完成后再终止。
通过上述方法,可确保线程安全、资源合理释放,并避免常见并发问题。