JAVA线程状态、线程START方法源码、多线程、JAVA线程池、如何停止一个线程等多线程问题
这两个方法有点容易记混,这里就记录一下源码。
Thread.interrupted()和Thread.currentThread().isInterrupted()区别
静态方法Thread.interrupted()源码如下:
public static boolean interrupted() { return currentThread().isInterrupted(true); }
可以看到,静态方法内部,调用了currentThread()获取当前线程后调用非静态方法isInterrupted();
根据源码,看到的区别是在于给isInterrupted()方法传参为true或不传参。
非静态方法Thread.currentThread().isInterrupted()源码如下:
1 2 3 | public boolean isInterrupted() { return isInterrupted( false ); } |
调用了isInterrupted(boolean ClearInterrupted)的有参方法:
/** * Tests if some Thread has been interrupted. The interrupted state * is reset or not based on the value of ClearInterrupted that is * passed. */ private native boolean isInterrupted(boolean ClearInterrupted);
该方法先获取线程中断状态,然后在根据参数决定是否重置中断状态,true重置,false不重置。
简单总结下:
静态方法Thread.interrupted()获取线程中断状态后,会重置中断状态为false;
非静态方法Thread.currentThread().isInterrupted()获取线程中断状态后,不会重置中断状态。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-09-29 给RabbitMQ发送消息时,设置请求头Header。