sleep(0)的意义
2024-10-21 07:37:21
Thread.Sleep(0) 并非是真的要线程挂起0毫秒,意义在于这次调用Thread.Sleep(0)的当前线程确实的被冻结了一下,让其他线程有机会优先执行。
Thread.Sleep(0) 是你的线程暂时放弃cpu,也就是释放一些未用的时间片给其他线程或进程使用,就相当于一个让位动作。
在线程没退出之前,线程有三个状态,就绪态,运行态,等待态。sleep(n)之所以在n秒内不会参与CPU竞争,是因为,当线程调用sleep(n)的时候,线程是由运行态转入等待态,线程被放入等待队列中,等待定时器n秒后的中断事件,当到达n秒计时后,线程才重新由等待态转入就绪态,被放入就绪队列中,等待队列中的线程是不参与cpu竞争的,只有就绪队列中的线程才会参与cpu竞争,所谓的cpu调度,就是根据一定的算法(优先级,FIFO等。。。),从就绪队列中选择一个线程来分配cpu时间。
而sleep(0)之所以马上回去参与cpu竞争,是因为调用sleep(0)后,因为0的原因,线程直接回到就绪队列,而非进入等待队列,只要进入就绪队列,那么它就参与cpu竞争。
————————————————
版权声明:本文为CSDN博主「HawkJony」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qiaoquan3/article/details/56281092
最新文章
- 获取WIFI密码
- Spring对 JDBC 的支持,JdbcTemplate类的使用
- android studio小技巧
- Hadoop中常用的InputFormat、OutputFormat(转)
- 浅谈Oracle函数返回Table集合
- Xcode本地文件 提交svn 的明细
- 从汇编看c++对静态成员的存取
- Nginx配置文件nginx.conf中文详解【转】
- SQL强化(一)保险业务
- 分布式高性能消息处理中心HPMessageCenter
- Oracle服务启动项
- 阿里技术一面,Java研发岗
- android打包方法超过65k错误
- I/O输入流基础之FileInputStream
- MySQL建表 TIMESTAMP 类型字段问题
- Javascript面向对象编程(二)
- ASP.NET Core 2.1中基于角色的授权
- 【问题解决方案】之 cmd 窗口问题汇总
- React Native 设置RGBA背景色
- 深入理解Node.js基于事件驱动的回调