news 2026/5/1 7:33:09

[Java 并发编程] Thread 类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[Java 并发编程] Thread 类

Thread 类

1. Interrupt

​ 在 Java 中,我们不能随意地中断一个线程,因为我们不清楚这个线程的运行状态,它可能持有锁,如果强行中断它可能会导致锁不能被释放的问题。或者可能正在操作数据库,强行中断可能出现数据不一致的情况。因此,Interrupt方法实际上是为目标线程设置一个中断状态,而不是真的中断其运行,目标线程的具体退出时机由其自己决定。

​ 如果目标线程处于运行状态,则不会受任何影响,只是状态被标记为中断,目标线程需调用isInterrupted()来监听这个状态,从而响应中断信号。

​ 如果目标线程处于阻塞状态(wait()join()sleep()),肯定就不能监听中断标记了,那么如何告知目标线程被中断呢,Java 在这里的处理方法是使这些可被中断的阻塞方法抛出InterruptedException,当然也会将其标记为中断。例如:

publicclassTransactionManager{// 该方法会尝试提交事务,如果提交失败(抛出 CommitException)会进行重试,最多重试 MAX_RETRIES 次。// 每次重试间隔 1 秒。如果在等待期间被中断则抛出 InterruptedException。publicbooleancommitWithRetry()throwsInterruptedException{for(inti=0;i<MAX_RETRIES;i++){try{returndoCommit();}catch(CommitExceptione){if(i==MAX_RETRIES-1)throwe;Thread.sleep(1000);}}returnfalse;}}// 调用方:try{transactionManager.commitWithRetry();}catch(InterruptedExceptione){transactionManager.rollback();// 执行回滚Thread.currentThread().interrupt();// 重新设置中断状态throwe;// 继续向上传递}

​ 这里的关键是,必须将中断信号一直传递下去(捕获InterruptedException会清除中断标记),也就是让上层代码能够感知线程的中断。这个信号的传递方式,可以是上抛异常,也可以是重新设置中断状态,也可以是抛出自定义的业务异常,这主要看上层代码是怎样响应中断信号的,但出于防御性编程的思想我们要尽量多做一些事情,这意味着:

​ 如果在当前层无需做任何处理,直接上抛,此时中断状态未清除。

​ 如果在当前层需要 catch 然后进行收尾处理,那么建议无论如何要调用interrupt()重新设置中断状态,并抛出自定义的业务异常,这样可以保证上层代码对中断的感知,无论其选择监听中断信号还是捕获异常。

2. Join

​ Join 指线程的合并,调用join()的语句可以理解为合并点,合并线程需要在合并点等待,一直等到被合并线程执行完成或等待超时。

3. Daemon

​ Java 中的线程分为两类,守护线程和用户线程,守护线程也称为后台线程,使用setDaemon(false)设置一个线程为守护线程。

​ 守护线程和用户线程的本质区别是:它们对 JVM 进程终止的影响不同。用户线程会主动影响 JVM 进程的终止,如果全部用户线程执行完毕,JVM 进程随之终止,无论当前存不存在守护线程,因此守护线程受 JVM 进程终止的被动影响。

​ 由于守护线程的终止具有不确定性,所以在守护线程中我们要尽量避免访问系统资源。否则如果守护线程被强行终止,可能会引发系统资源操作的中断,导致资源损坏。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 13:22:10

WSL终极使用指南:从新手到专家的完整教程

WSL终极使用指南&#xff1a;从新手到专家的完整教程 【免费下载链接】WSL Source code behind the Windows Subsystem for Linux documentation. 项目地址: https://gitcode.com/gh_mirrors/wsl3/WSL Windows Subsystem for Linux (WSL) 彻底改变了Windows开发者的工作…

作者头像 李华
网站建设 2026/4/20 5:32:12

Pyenv多平台安装与配置终极指南:告别Python版本冲突烦恼

Pyenv多平台安装与配置终极指南&#xff1a;告别Python版本冲突烦恼 【免费下载链接】pyenv Simple Python version management 项目地址: https://gitcode.com/GitHub_Trending/py/pyenv 还在为不同项目需要不同Python版本而头疼吗&#xff1f;系统自带Python版本太旧&…

作者头像 李华
网站建设 2026/4/23 19:14:02

Android图片选择器终极指南:MultiImageSelector快速集成方案

Android图片选择器终极指南&#xff1a;MultiImageSelector快速集成方案 【免费下载链接】MultiImageSelector Deprecated -- Image selector for Android device. Support single choice and multi-choice. 项目地址: https://gitcode.com/gh_mirrors/mu/MultiImageSelector…

作者头像 李华
网站建设 2026/4/29 15:10:31

小米AI音箱设备适配终极解决方案:三步搞定固件兼容性问题

小米AI音箱设备适配终极解决方案&#xff1a;三步搞定固件兼容性问题 【免费下载链接】xiaogpt Play ChatGPT and other LLM with Xiaomi AI Speaker 项目地址: https://gitcode.com/gh_mirrors/xia/xiaogpt 你是否也遇到过这样的困扰&#xff1f;明明按照教程一步步配置…

作者头像 李华
网站建设 2026/4/24 2:41:33

观察者与宇宙:描述如何创造物理实在

观察者与宇宙&#xff1a;描述如何创造物理实在 引言&#xff1a;被忽略的观察者角色 当你欣赏一朵蓝色的勿忘我花时&#xff0c;你看到的「蓝色」其实并不存在于花本身&#xff0c;而是你的大脑对波长约450纳米的电磁波的主观解读。当你听到远处传来周杰伦的《晴天》&#xff…

作者头像 李华
网站建设 2026/4/19 17:47:54

跨平台音频转发终极指南:用AirConnect实现AirPlay多设备同步

跨平台音频转发终极指南&#xff1a;用AirConnect实现AirPlay多设备同步 【免费下载链接】AirConnect Use AirPlay to stream to UPnP/Sonos & Chromecast devices 项目地址: https://gitcode.com/gh_mirrors/ai/AirConnect AirConnect是一个革命性的开源工具&#…

作者头像 李华