0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Thread.sleep(0)到底是个什么骚操作?

Android编程精选 来源:CSDN 2023-01-03 11:19 次阅读

今天看到一段有意思的代码:Thread.sleep(0),下面就来分析一下这串看似无用的代码到底有没有用。

Thread.sleep(0)到底是个什么骚操作,这睡0毫秒和不睡有什么区别吗?

操作系统资源的分配策略

想要去了解多线程,就先要去了解操作系统中资源的不同分配策略在操作系统中,CPU资源的分配策略有多种,下面就拿两种最为典型的策略举例:

时间片算法

基于时间片算法分配资源的代表就是Unix系统。在时间片算法中,操作系统会维护一个队列,将所有的进程放入队列中。然后操作系统会按照队列中的进程顺序为他们分配属于自己的运行时间,也就是说,操作系统给A进程分配n毫秒时间,那么A进程在本次排队时只可以运行n毫秒。

当A进程运行完n毫秒后,操作系统不管A是否运行完毕都会把运行权限强行剥夺,交给队列里面的下一个进程去执行,然后A进程继续去队列尾部进行下一次排队。(这里,如果A在n毫秒之前提前结束或者被阻塞,操作系统会立即收回A的运行权限)

举个例子:

你去食堂买饭,这种模式就是食堂会强制你去排队,而且每人只有十分钟点餐时间,一旦过了这个时间你就要重新去排队。

抢占式

基于抢占式分配资源的代表是Winodws系统。抢占式的操作系统都是“儒家学派”的,默认每个进程都是“君子”。意思就是:一个进程一旦拿到CPU后,除非它主动放弃CPU权限,不然别的进程是拿不到CPU权限的。

然后操作系统在选取执行权限的时候也不是随机选的,它会根据优先级和饥饿时间来判定谁更需要CPU权限的。每次一个进程是释放CPU后,就会进行一次优先级评定。也就是说,如果运气好,每次都会被选中。

举个例子:

你去食堂买饭,食堂阿姨看你小伙子挺帅就先给你盛饭。然后给你盛完饭再选一次,又发现你这小伙子越看越顺眼,就再给你一碗。

关于Sleep

拿抢占式来说。去食堂吃饭,阿姨看小伙子挺不错,三番五次的给你盛饭,但是你已经吃饱了,这时候你就会告诉阿姨我吃饱了,接下来半小时不要再给我盛饭了。

对应到代码里就是,A最近30min不想再参与资源选举了,这时它就会sleep(30 * 60 * 1000),然后操作系统就会进行再次选举,并且未来半小时A不参与选举。此时当A醒来之后,或许CPU执行权在另一个进程手里。

再说Thread.sleep(0)

假如A执行了一段时间后,突然想起来其他小伙伴可能也需要CPU执行权限,不能光自己一个人霸占这个CPU,但是又没办法主动申请再次选举,就只能退而求其次执行Thread.sleep(0),在A有执行权限的情况下执行,执行后告诉操作系统,我要休息0毫秒,你接下来0毫秒内的选举就不要选我啦。但是操作系统下次再选举的时候还是会把A算进去,因为0毫秒已经过了。

总结

Thread.sleep(0)不光有用,而且有奇效,对于想做老好人的进程可以调用一次,让操作系统再次进行选举。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4601

    浏览量

    92683
  • 操作系统
    +关注

    关注

    37

    文章

    6747

    浏览量

    123207
  • 代码
    +关注

    关注

    30

    文章

    4758

    浏览量

    68374

原文标题:Thread.sleep(0)到底是个什么骚操作?

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TLV320AIC3254内部中的ADC处理模块和minidsp到底是什么关系?

    我想请问一下几个问题: 1.3254内部中的ADC处理模块和minidsp到底是什么关系,是并列的还是串行关系?还是ADC处理模块就是minidsp特殊情况下的部分? 2.minidsp的抽取因子该怎么理解,到底怎么使用?
    发表于 10-31 06:02

    请问PCM2903C的温度范围到底是多少呢?

    如下图,PCM2903C的温度范围到底是多少呢? 如果用在-25~85℃,是否会出问题?
    发表于 10-14 07:14

    放大器的共模输入电压到底是指什么?

    请问放大器的共模输入电压到底是指什么?
    发表于 09-19 07:17

    功放和运放到底是什么区别?

    想请问一下功放和运放到底是什么区别,感觉只要接一小负载,运放的输出电流也可以很大啊?到底有什么区别啊
    发表于 09-10 07:00

    请问LMV772到底是双电源还是单电源啊?

    请问LMV772到底是双电源还是单电源啊?手册前面写的太模糊了。求指教
    发表于 09-09 07:10

    运放的输入电容到底是什么?

    我想请问一下运放的输入电容到底是什么?
    发表于 09-04 06:52

    LMH6502的输入电压到底是多少?

    LMH6502的输入电压到底是多少,我稍微给如大一点点的信号,放大不行还能接受,我衰减都失真,
    发表于 08-27 07:02

    对于STM8的固件库,到底是怎么对文件进行配置的?

    对于STM8的固件库,到底是怎么对文件进行配置的?
    发表于 05-17 15:59

    共享单车到底是什么通信原理

    我们经常骑的共享单车到底是什么通信原理,有人了解过吗? 一、智能车锁 共享单车最核心的硬件是智能车锁,主要用于实现控制和定位功能。
    发表于 04-09 10:33 814次阅读
    共享单车<b class='flag-5'>到底是</b>什么通信原理

    在RK3568上安装RT-Thread,根据板级支持包操作时遇到的疑问求解

    我想在RK3568上安装RT-Thread,根据板级支持包操作时,遇到了一些疑问,大佬求教! 我已经完成了编译部分,生成了rtthread.elf与rtthread.bin文件 请问烧录进SD
    发表于 03-01 06:23

    共享单车到底是什么通信原理?

    我们经常骑的共享单车到底是什么通信原理,有人了解过吗?下面宝蓝小编就带大家了解下。
    的头像 发表于 02-25 10:32 1349次阅读
    共享单车<b class='flag-5'>到底是</b>什么通信原理?

    请问M487KMCAN的SRAM到底是128KB还是160K?

    M487KMCAN的SRAM到底是128 KB 还是160K
    发表于 01-16 07:18

    MES的本质到底是什么?

     MES的本质到底是什么?  1.一套生产现场的综合管理的集成系统。用集成的思想替代原来的设备管理、质量管理、生产排程、DNC、数据采集软件等车间需要使用的孤立的软件系统。2. MES在信息化系统中
    发表于 12-07 11:03 0次下载

    去耦滤波电容怎么布局摆放,到底是先大后小还是先小后大?

    去耦滤波电容怎么布局摆放,到底是先大后小还是先小后大?
    的头像 发表于 12-04 15:43 2320次阅读
    去耦滤波电容怎么布局摆放,<b class='flag-5'>到底是</b>先大后小还是先小后大?

    请问AD9684最低采样率到底是多少?

    关于AD9684最低采样率,数据手册有两处描述,但是不一致。请问AD9684最低采样率到底是多少?
    发表于 12-04 06:34