news 2025/12/23 8:04:55

[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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/22 11:54:16

如何用Llama-Factory在多GPU环境下加速大模型训练?

如何用 Llama-Factory 在多GPU环境下加速大模型训练 在大语言模型&#xff08;LLMs&#xff09;飞速发展的今天&#xff0c;动辄数十亿甚至上千亿参数的模型已经不再是实验室里的稀有产物。越来越多的企业和开发者希望基于这些强大的基座模型进行定制化微调&#xff0c;以适应特…

作者头像 李华
网站建设 2025/12/23 7:15:08

3分钟搞定IPXWrapper:让老游戏在新电脑上满血复活的神器

还记得那些年和小伙伴们一起通宵打《红色警戒2》、《魔兽争霸II》的日子吗&#xff1f;&#x1f62d; 现代Windows系统虽然功能强大&#xff0c;却无情地抛弃了IPX/SPX协议支持&#xff0c;让我们的怀旧游戏梦碎一地。别慌&#xff01;今天要介绍的IPXWrapper就是专治这种"…

作者头像 李华
网站建设 2025/12/17 15:32:15

从零开始掌握Meshroom:摄影测量3D建模实战指南

从零开始掌握Meshroom&#xff1a;摄影测量3D建模实战指南 【免费下载链接】Meshroom 3D Reconstruction Software 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 想要将普通照片转化为专业级3D模型却不知从何入手&#xff1f;Meshroom这款基于开源AliceVision…

作者头像 李华
网站建设 2025/12/12 10:25:21

昇腾平台openPangu模型推理性能优化实战

昇腾平台openPangu模型推理性能优化实战 【免费下载链接】openPangu-Embedded-1B-V1.1 昇腾原生的开源盘古 Embedded-1B-V1.1 语言模型 项目地址: https://ai.gitcode.com/ascend-tribe/openPangu-Embedded-1B-V1.1 边缘AI性能瓶颈的突破之道 在嵌入式设备上部署大语言…

作者头像 李华
网站建设 2025/12/12 10:22:02

Wan2.2-T2V-A14B模型在核电站应急疏散视频中的路线规划

Wan2.2-T2V-A14B模型在核电站应急疏散视频中的路线规划 在核电站这类高风险工业设施中&#xff0c;一次有效的应急响应可能决定成百上千人的生死。传统上&#xff0c;应急预案以文档形式存在&#xff0c;依赖人工解读和定期实地演练来验证其可行性。然而&#xff0c;这些方式不…

作者头像 李华
网站建设 2025/12/12 10:19:27

核反应堆安全控制系统中的Agent技术:如何构建永不宕机的智能防护网

第一章&#xff1a;核反应堆安全控制系统中Agent技术的演进与挑战随着核电站自动化水平的不断提升&#xff0c;传统集中式控制架构在应对复杂故障场景时逐渐暴露出响应延迟、容错能力弱等问题。在此背景下&#xff0c;基于Agent的技术因其分布式智能、自主决策和协同交互的特性…

作者头像 李华