news 2026/4/18 4:16:41

[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/18 3:29:24

Universal Android Debloater 终极指南:快速清理手机预装应用

Universal Android Debloater 终极指南&#xff1a;快速清理手机预装应用 【免费下载链接】universal-android-debloater-next-generation Cross-platform GUI written in Rust using ADB to debloat non-rooted Android devices. Improve your privacy, the security and batt…

作者头像 李华
网站建设 2026/4/18 3:25:34

Steam游戏清单一键获取:Onekey工具使用全攻略

Steam游戏清单一键获取&#xff1a;Onekey工具使用全攻略 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为繁琐的Steam游戏清单下载而烦恼吗&#xff1f;Onekey工具让你告别手动搜索的麻烦…

作者头像 李华
网站建设 2026/4/18 3:30:53

科学记忆法提升高考成绩

高考的脚步越来越近&#xff0c;高三学生和家长们的心情也愈发紧张。每天面对堆积如山的课本、密密麻麻的笔记&#xff0c;很多孩子反映&#xff1a;“知识点明明复习过&#xff0c;可一到考试就想不起来”“公式、定义背了又忘&#xff0c;效率特别低”。这不仅仅是努力不够的…

作者头像 李华
网站建设 2026/4/18 5:26:23

U-2-Net模型跨平台部署实战:从PyTorch到ONNX的完整转换指南

U-2-Net模型跨平台部署实战&#xff1a;从PyTorch到ONNX的完整转换指南 【免费下载链接】U-2-Net U-2-Net - 用于显著对象检测的深度学习模型&#xff0c;具有嵌套的U型结构。 项目地址: https://gitcode.com/gh_mirrors/u2/U-2-Net 在深度学习模型部署的实际应用中&…

作者头像 李华
网站建设 2026/4/18 5:44:17

为什么90%的金融企业都低估了Agent行为审计的重要性?

第一章&#xff1a;金融合规视角下的Agent行为审计认知重构在金融行业日益强调合规与透明的背景下&#xff0c;传统系统中对智能Agent行为的审计机制已难以满足监管要求。随着自动化决策系统在信贷审批、交易执行和风险评估中的广泛应用&#xff0c;重构Agent行为审计的认知框架…

作者头像 李华