news 2026/6/24 7:43:08

[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/6/23 11:13:28

PrivateGPT完整使用教程:3步实现本地文档智能问答的终极指南

在当今数据隐私日益重要的时代&#xff0c;PrivateGPT作为一款完全离线的AI文档处理工具&#xff0c;让您能够在本地环境中安全地处理各类文档并获得智能回答。这款工具的核心优势在于其强大的上下文窗口优化能力&#xff0c;能够轻松应对超长文档的处理需求。&#x1f680; 【…

作者头像 李华
网站建设 2026/6/23 21:24:55

终极指南:如何用PandasAI实现零代码数据分析

终极指南&#xff1a;如何用PandasAI实现零代码数据分析 【免费下载链接】pandas-ai 该项目扩展了Pandas库的功能&#xff0c;添加了一些面向机器学习和人工智能的数据处理方法&#xff0c;方便AI工程师利用Pandas进行更高效的数据准备和分析。 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/6/24 0:21:38

企业级JAR包安全审计实战:反编译技巧大公开

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个JAR包安全审计系统&#xff0c;功能包括&#xff1a;1.上传JAR自动反编译 2.使用DeepSeek模型检测危险API调用 3.识别敏感权限申请 4.标记可疑代码片段 5.生成安全评估报告…

作者头像 李华
网站建设 2026/6/19 5:33:10

Wan2.2-T2V-A14B模型镜像的版本回滚与兼容性管理策略

Wan2.2-T2V-A14B模型镜像的版本回滚与兼容性管理策略 在AI视频生成技术加速落地的今天&#xff0c;一个看似流畅的广告短片背后&#xff0c;可能隐藏着复杂的工程挑战。当Wan2.2-T2V-A14B这样的百亿参数模型被部署到生产环境时&#xff0c;一次不经意的版本更新就可能导致GPU显…

作者头像 李华
网站建设 2026/6/23 7:31:01

Wan2.2-T2V-A14B能否生成房地产开盘活动预告片?高端地产营销方案

Wan2.2-T2V-A14B能否生成房地产开盘活动预告片&#xff1f;高端地产营销方案 在高端地产项目的推广战场上&#xff0c;时间就是先机。一个尚未封顶的楼盘&#xff0c;如何在竞品林立的市场中率先抢占客户心智&#xff1f;传统做法是依赖效果图、沙盘和文案渲染“未来生活”&…

作者头像 李华
网站建设 2026/6/19 8:17:21

【Spring MVC视图篇】ViewResolver与视图渲染机制:整合Thymeleaf/FreeMarker的`AbstractTemplateViewResolver`原理及Model数据传递

导言&#xff1a;Spring MVC 请求处理的收尾艺术 在 Spring MVC 的宏大体系中&#xff0c;视图解析和渲染是承接业务处理和用户界面呈现的关键收尾环节。它要求极高的效率、安全性与可定制性。ViewResolver 体系作为核心策略&#xff0c;决定了如何将 Controller 交付的业务数…

作者头像 李华