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

    文章

    4803

    浏览量

    98530
  • 操作系统
    +关注

    关注

    37

    文章

    7436

    浏览量

    129612
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74373

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MOS管到底是什么?和三极管、继电器有什么本质区别?

    MOS管到底是什么?和三极管、继电器有什么本质区别?在电子设备的“心脏”部位,藏着许多默默工作的“开关选手”。它们操控着电流的通断,决定着设备的效率与稳定性。其中,MOS管作为近年来高频
    的头像 发表于 01-07 13:46 984次阅读
    MOS管<b class='flag-5'>到底是</b>什么?和三极管、继电器有什么本质区别?

    IGBT到底是什么?-从名称入手来带您了解

    对于工作需要用到IGBT、但从未专业学习过IGBT的人来说, IGBT到底是什么、它为什么叫IGBT、它的核心关键词是什么、要怎么理解它 等一系列问题并无法一次性在某个地方获取到,都需要查阅大量的资料,学习大量的基础才能有初步的了解。 为了让更多的人在更少的时间内掌握I
    的头像 发表于 11-25 17:38 2636次阅读
    IGBT<b class='flag-5'>到底是</b>什么?-从名称入手来带您了解

    请问Keil中的map文件到底是什么意思?

    Keil中的map文件到底是什么意思?里面是如何进行相关执行操作
    发表于 11-25 06:59

    单片机和嵌入式,到底是什么关系?

    的关系:什么是单片机?什么是嵌入式?它们到底是不是一回事?先说说大家最先听说的那个词——单片机(MCU)。单片机,全称是MicrocontrollerUnit,顾名思
    的头像 发表于 11-14 10:28 2069次阅读
    单片机和嵌入式,<b class='flag-5'>到底是</b>什么关系?

    单片机的差分信号到底是什么?

    差分信号到底是什么?通俗来讲,就是驱动端发送两等值、反相的信号,接收端通过比较这两电压的差值来判断逻辑状态“0”还是“1”。 差分信号的产生是由输入源发出信号后经过缓冲器和倒相器
    发表于 11-12 06:44

    RT_Thread Studio到底是用什么工具构建的?Scons还是Cmake?

    ;../rt-thread/libcpu/arm/common/div0.c\" ../rt-thread/src/thread.c: In function \'_
    发表于 10-10 07:49

    使用rt-thread studio ,配置某对GPIO为串口,比如配置PA0与PA1 为uart1 ;如何操作

    请教一下,使用rt-thread studio ,配置某对GPIO为串口,比如配置PA0与PA1 为uart1 ;如何操作? 我在rt-thread studio中,已经写好测试的串口
    发表于 09-11 07:50

    IEC 到底是什么?为什么它能影响全球?

    IEC 到底是什么?为什么它能影响全球?
    的头像 发表于 09-04 17:07 3893次阅读

    【好书推荐】RT-Thread第20本相关书籍!《嵌入式实时操作系统RT-Thread原理与应用》| 技术集结

    01内容简介ContentSummary本书为读者提供了一全面、系统的RT-Thread学习指南,旨在帮助初学者及有经验的开发者掌握RT-Thread实时操作系统和STM32嵌入式微
    的头像 发表于 08-24 10:05 1266次阅读
    【好书推荐】RT-<b class='flag-5'>Thread</b>第20本相关书籍!《嵌入式实时<b class='flag-5'>操作</b>系统RT-<b class='flag-5'>Thread</b>原理与应用》| 技术集结

    RT-Thread 遇上 Rust:安全内核 RusT-Thread 的诞生

    大家好,我们是中国科学技术大学操作系统原理与设计(H)课oooooS小组。这个项目是我们的课程大作业:参考RT-Thread架构,使用Rust搭建一原生的嵌入式操作系统内核。初识Ru
    的头像 发表于 08-02 11:03 3713次阅读
    RT-<b class='flag-5'>Thread</b> 遇上 Rust:安全内核 RusT-<b class='flag-5'>Thread</b> 的诞生

    晶振的 “负载电容” 到底是什么

    负载电容,到底是什么? 负载电容,简单来说,是指晶振的两条引线连接IC块内部及外部所有有效电容之和,我们可以将其看作晶振片在电路中串接的电容。从更专业的角度讲,它是为了使晶振能够在其标称频率下稳定
    的头像 发表于 07-25 16:26 1202次阅读

    请问编译纯rtos到底是选择Linux+rtos的sdk编译only rtos还是直接使用rtos sdk?

    编译纯rtos到底是选择Linux+rtos的sdk编译only rtos还是直接使用rtos sdk?
    发表于 07-11 07:22

    【直播预告】《实时操作系统应用技术—基于RT-Thread与ARM的编程实践》教学脉络及资源简介

    直播预告直播主题:《实时操作系统应用技术—基于RT-Thread与ARM的编程实践》教学脉络及资源简介开放时间:2025年5月29日(周四)20:00主讲老师:王宜怀课程类型:视频直播观看平台
    的头像 发表于 05-26 17:50 1403次阅读
    【直播预告】《实时<b class='flag-5'>操作</b>系统应用技术—基于RT-<b class='flag-5'>Thread</b>与ARM的编程实践》教学脉络及资源简介

    智能盒子到底是什么东西?昇腾310深度测评:为何能成为行业新宠?

    让人摸不着头脑的“智能盒子”。各位搞技术、搞工程的朋友,咱们在工作中是不是经常听到“智能盒子”这个说法?每次听到这个词,我猜很多人心里都在犯嘀咕:这东西到底是啥玩意儿?难道就是装了点智能软件的普通盒子?它
    的头像 发表于 04-27 10:46 2073次阅读
    智能盒子<b class='flag-5'>到底是</b>什么东西?昇腾310深度测评:为何能成为行业新宠?

    一文给你讲透!DA板卡到底是什么?它和主板又有哪些不同?

    大家好,我是老王,在电子行业干了十几年,今天我就用“大白话”给大家讲讲DA板卡到底是啥,它和咱们常说的“主板”有啥区别。文章里会穿插一些表格和实际案例,保证你读完不仅能懂,还能跟朋友吹牛!
    的头像 发表于 04-24 16:48 2967次阅读
    一文给你讲透!DA板卡<b class='flag-5'>到底是</b>什么?它和主板又有哪些不同?