线程原理探究
欢迎大家访问handsomecui的博客,转载请注明地址https://www.cnblogs.com/handsomecui,欢迎加入技术群讨论:778757421
一、介绍:
1 2 3 4 5 6 7 8 | 当实例化一个线程之后,首先进入初始状态,即New状态,此时线程在启动的时候并不是立刻就运行, 而是要等到操作系统调度之后才运行,然后调用start()进入运行状态,即runnable, 其中运行状态中包括运行(running)和就绪(ready)两种状态, 这两种状态在操作系统的调度下可以互相转换,如果运行中的线程时间片被CPU抢占的话就会变成就绪状态; 运行中的线程通过调用synchronized方法或synchronized块进入阻塞状态,即blocked,当线程获取到锁之后进入运行状态; 如果线程在执行过程中调用了 sleep (),wait(). join (),Locksupported.parkUtil()等方法时,会进入等待状态(waiting)或超时等待状态,即timed_waiting, 再次调用notify(),notifyAll(),Locksupported.unpark()等方法时,又会重新进入运行时状态, 当线程执行完成时,就进入了终止状态,即terminated状态。 |
- wating和blocked区别:
123
与wating状态相关联的是等待队列,与blocked状态相关的是同步队列,
一个线程由等待队列迁移到同步队列时,线程状态将会由wating转化为blocked。
可以这样说,blocked状态是处于wating状态的线程重新焕发生命力的必由之路。
- BLOCKED,WAITING,TIMED_WAITING区别:
12345678910111213
https:
//www
.jianshu.com
/p/0976b2f23db1
BLOCKED: 这种状态是指一个阻塞线程在等待monitor锁。
当线程调用Object
#wait()方法进入一个synchronized块/方法或重进入一个synchronized锁/方法时会等待获取monitor锁。
WAITING: 一个线程在等待另一个线程执行一个动作时在这个状态
1. Object
#wait() 而且不加超时参数
2. Thread
#join() 而且不加超时参数
3. LockSupport
#park()
TIMED_WAITING: 一个线程在一个特定的等待时间内等待另一个线程完成一个动作会在这个状态
* Thread
#sleep()
* Object
#wait() 并加了超时参数
* Thread
#join() 并加了超时参数
* LockSupport
#parkNanos()
* LockSupport
#parkUntil()
二、同步队列和阻塞队列
【推荐】国内首个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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-09-30 matlab学习