首页
学习
活动
专区
圈层
工具
发布

Java 中为什么不推荐在 while 循环中使用 sleep()

前言最近逛 CSDN 看到一篇文章,文章大意是说为什么在循环中不推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService...something }}上面的代码你可能会得到下面的警告:Call to ‘Thread.sleep()’ in a loop, probably busy-waiting// 循环中调用 sleep...可能会导致忙等待 // 如 FLAG 变量状态未改变 那么线程可能一直循环,并不断进行线程挂起和唤醒原因是否正确主要原因和原文博主所说有很大的关系但不完全正确:我们都知道 Java 线程实际对应着操作系统中的一个线程...方案是否合理记住一点,讨论方案永远不能脱离场景,没有一种方案可以适应所有的场景,我们永远只是在探讨适合当前场景的方案。...比如一些用户登录场景,当用户登录状态改变时,发送登录事件进行后续处理,比如登录通知等等等待和唤醒等待和唤醒机制一般适用于等待时间较长的场景,因为等待和唤醒是一个性能消耗比较大的操作;在等待时间不是很长的场景可以使用轮询机制

3.3K30

多线程:为什么在while循环中加入System.out.println,线程可以停止

,而线程栈中的值不是最新的,所以会一直循环,线程并不能停止。...但是本文的意思不在此,不对 stopReqested 加同步关键字是否就不能停止了呢?不是的。...最开始的代码,一直处于试了循环中,CPU 处于一直被饱受占用的时候,这个时候 CPU 没有时间,JVM 也不能强制要求 CPU 分点时间去取最新的变量值。...而加了 System.out.println 之后,由于内部代码的同步关键字的存在,导致CPU的输出其实是比较耗时的。这个时候CPU就有可能有时间去保证内存的可见性,于是while循环可以被终止。...其实,也可以在 while 循环里面加上 sleep ,让 run 方法放弃 cpu ,但是不放弃锁,这个时候由于 CPU 有空闲的时候就去按照 JVM 的要求去保证内存的可见性。如下所示。

1.9K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CC++ 宏中 `do { ... } while (0)` 的“零次循环”技巧

    问题现象C/C++ 宏只是简单的文本替换,若宏体包含多条语句,替换后极易出现以下两类错误:else 悬空 #define FOO(x) stmt1; stmt2;if (cond) FOO(x...解决方案:do { ... } while (0)把宏体包装在 单次执行的 do-while 循环 中:#define FOO(x) \ do { stmt1; stmt2; } while (0...)语义:循环体只执行一次,与 if/else、for、while 等结构无缝衔接。...使用要点宏体含多条语句、内部变量定义或需要“单语句”语义时,务必使用 do { ... } while (0)。 对于只含一条表达式的宏,可省略此技巧,但保持一致性亦可保留。...结论do { ... } while (0) 是一个 零成本、零副作用 的惯用法,确保宏在任何上下文中表现如一条普通语句。

    18620

    ☀️ 学会编程入门必备 C# 最基础知识介绍——带你认识 C# 中的几种循环结构( for & while & do...while)

    嵌套循环 可以在 while、for 或 do…while 循环内使用一个或多个循环。 ---- C# for/foreach 循环????...不像 for 和 while 循环,它们是在循环头部测试循环条件。do…while 循环是在循环的尾部检查它的条件。...do…while 循环与 while 循环类似,但是 do…while 循环会确保至少执行一次循环 ---- 语法 C# 中 do…while 循环的语法: do { statement(s);...循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。 C# 提供了下列的控制语句。...如果条件永远不为假,则循环将变成无限循环。for 循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。

    1.9K30

    C语言基础——循环详解!

    while 循环 do...While循环 For循环 一、while循环 1、形式: while (表达式) // { //语句 } 表达式 每一次循环都要判定表达式的值 如果为真(表达式的值为1)...继续执行循 环后面的代码 (3)执行完b 后,继续判断a是否满足条件。...由于while循环不会自行更改循环控 制变量的内容,所以while循环中为循环控制变量赋值的工作要由设计者自己来 做,完成后再回到步骤(2)重新判断是否继续执行循环。...裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程 二、Do.....while do { 语句; } while (表达式); 先执行一次循环里面的代码,然后对表带是求值,值为真接着循环...语句先执行一次,在进行判断,while先判断后执行。

    5.1K00

    【Java】循环语句for、while、do-while

    循环语句 1.1 循环概述 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环 体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false...③具体执行的语句 ④循环后,循环变量的变化情况 输出10次HelloWorld do...while 循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成 false ,也依然会循...原因是 for 循环结束,该变量就从 内存中消失,能够提高内存的使用效率。 在已知循环次数的时候使用推荐使用 for ,循环次数未知的时推荐使用 while 。...扩展知识点 2.1 死循环 死循环: 也就是循环中的条件永远为 true ,死循环的是永不结束的循环。例如: while(true){} 。...在后期的开发中,会出现使用死循环的场景,例如:我们需要读取用户输入的输入,但是用户输入 多少数据我们并 不清楚,也只能使用死循环,当用户不想输入数据了,就可以结束循环了,如何去结束一个死循环

    8.8K10

    C语言中循环语句总结

    while循坏:  for循环:  while和for循环的对比: 区别:for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护...do while循环 使用条件:使⽤在循环体⾄少被执⾏⼀次的场景下 eg:输⼊⼀个正整数,计算这个整数是⼏位数?...如果你希望 n 的初始值为 0 时不进行计算,可以改用 while 循环并将判断条件放在循环之前。  break和continue在循环语句中的作用 break:永久的终⽌循环....,来到了i++的调整部分 printf("%d ", i); } return 0; } 运行结果: 对比for循环和while循环中continue对代码的运行影响: 分析代码可以知道它们修改条件的位置不同...,在i=5这个基础上进行i++ do while语句中break和continue的作用跟while一样: goto语句 作用:goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。

    2.7K10

    MySQL数据库,详解流程控制语句(四)

    repeat循环 语法 [标签:]repeat 循环体; until 结束循环的条件 end repeat [标签]; repeat循环类似于java中的do...while循环,不管如何,循环都会先执...这块和while不 同,while是先判断条件是否成⽴再执⾏循环体。 示例1:⽆循环控制语句 根据传⼊的参数v_count向test1表插⼊指定数量的数据。...后⾯可以省略case, begin end中使⽤不能省略case 4. if语句⽤在begin end中 5. 3种循环体的使⽤,while类似于java中的while循环,repeat类似于java...中的do while 循环,loop类似于java中的死循环,都⽤于begin end中 6....循环中体中的控制依靠leave和iterate,leave类似于java中的break可以退出循 环,iterate类似于java中的continue可以结束本次循环

    3.1K10

    for循环的简介及break和continue的区别

    大家好,又见面了,我是你们的朋友全栈君。 1.for循环 for循环是更加简洁的循环语句,大部分情况下,for循环可以代替while循环、do-while循环。...for循环的格式为: for( 初始语句 ; 执行条件 ; 增量 ) { 循环体 } 执行顺序:1、初始语句 2、执行条件是否符合?...3、循环体 4、增加增量 初始化语句只在循环开始前执行一次,每次执行循环体时要先判断是否符合条件,如果循环条件还会true,则执行循环体,在执行迭代语句。...注意:for循环的循环体和迭代语句不在一起(while和do-while是在一起的)所以如果使用continue来结束本次循 环,迭代语句还有继续运行,而while和do-while的迭代部分是不运行的...可以理解为continue是跳过当次循环中剩下的语句,执行下一次循环。

    9.8K11

    10min快速回顾C++语法(三)循环跳转专题

    C++的语法基础(三)循环跳转专题 ⭐写在前面的话:本系列文章旨在短时间内回顾C/C++语法中的重点与易错点,巩固算法竞赛与写题过程中常用的语法知识,精准地解决学过但有遗忘的情况,为算法刷题打下坚实的基础...循环跳转专题 C++的语法基础(三)循环跳转专题 五、循环语句 5.1 while循环 5.2 do while循环 5.3 for循环 5.4 多层循环 六、跳转语句 6.1 break 6.2...if语句是判断一次,如果条件成立,则执行后面的语句; while是每次判断,如果成立,则执行循环体中的语句,否则停止。括号内不能为空。 可以用循环求斐波那契数列的第n项。...我们要避免写出死循环。 5.2 do while循环 do while循环不常用。 do while语句与while语句非常相似。唯一的区别是,do while语句限制性循环体后检查条件。...; condition是条件表达式,和while中的条件表达式作用一样;可以为空,空语句表示true; expression一般负责修改循环变量,可以为空。

    39820

    C++ While 和 For 循环:流程控制全解析

    default 关键字default 关键字指定如果没有 case 匹配时要运行的一些代码。C++ While 循环循环可以在达到指定条件时执行一段代码块。...C++ While 循环while 循环通过一个指定条件为 true 时循环执行代码块:语法while (condition) { // 要执行的代码块}在下面的示例中,只要变量(i)小于 5,循环中的代码就会一遍又一遍地运行...C++ Do/While 循环do/while 循环是 while 循环的变体。这个循环会在检查条件是否为 true 之前执行一次代码块,然后只要条件为 true,就会重复执行循环。...另一个示例此示例将只打印 0 到 10 之间的偶数值:for (int i = 0; i 循环还可以在另一个循环中放置一个循环...循环还有一个“foreach 循环”(在 C++ 版本 11(2011)中引入),它专门用于遍历数组(或其他数据集)中的元素:语法for (类型 变量名 : 数组名) { // 要执行的代码块}以下示例使用

    29010

    10min快速回顾C++语法(三)

    C++的语法基础(三) ⭐写在前面的话:本系列文章旨在短时间内回顾C/C++语法中的重点与易错点,巩固算法竞赛与写题过程中常用的语法知识,精准地解决学过但有遗忘的情况,为算法刷题打下坚实的基础。...五、循环语句 5.1 while循环 可以简单理解为循环版的if语句。 if语句是判断一次,如果条件成立,则执行后面的语句; while是每次判断,如果成立,则执行循环体中的语句,否则停止。...我们要避免写出死循环。 5.2 do while循环 do while循环不常用。 do while语句与while语句非常相似。唯一的区别是,do while语句限制性循环体后检查条件。...; condition是条件表达式,和while中的条件表达式作用一样;可以为空,空语句表示true; expression一般负责修改循环变量,可以为空。...所有点距离中心的距离小于某一值,将其输出,剩余的输出为空格即可。* 六、跳转语句 6.1 break 可以提前从循环中退出,一般与if语句搭配。

    46520

    C++循环嵌套

    C++循环的嵌套 循环的嵌套就是,一个循环体内又包含了另一个完整的循环结构;内嵌的循环中还可以嵌套循环,这就是多层循环。...在C++中,while循环、do while循环、for循环都可以互相嵌套,例如以下几种 while语句嵌套while语句 while() {   ……   while()   {     ……   }...(); C++循环的比较 while循环、do  while循环、for循环都可以用来处理同一问题,一般情况下,这三种循环可以互相代替,但是说实话,小林在开发中还是习惯用for循环。...for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。...用while和do while循环时,循环变量初始化的操作应该在while和do while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。

    2.2K3028

    C语言编程中复杂的循环结构,你被循环晕了吗?

    下面给出的是大多数编程语言中循环语句的一般形式 C编程语言提供以下类型的循环来处理循环要求。 1. while循环 2. For循环 3. Do...while循环 4....语法 C编程语言中while循环的语法是 - while(condition) { statement(s); } 这里,语句可以是单个语句或语句块。所述条件可以是任何表达,和真正的是任何非零值。...... while循环的语法是 - do { statement(s); } while( condition ); 请注意,条件表达式出现在循环的末尾,因此循环中的语句在测试条件之前执行一次。...由于不需要构成'for'循环的三个表达式,因此可以通过将条件表达式留空来创建无限循环。...(其他死循环不做讲解,自行补充) 我有一个微信公众号,经常会分享一些C语言/C++技术相关的干货;如果你喜欢我的分享,可以用微信搜索“C语言学习部落”关注,欢迎大家加入千人交流答疑裙:627+012+464

    1.9K20

    JavaScript之选择控制语句(if,switch,while,do-while,for循环)及很重要的表达式真与假

    作者 | 随笔川迹 ID | suibichuanji 前言 撰文:川川 您将在本文当中学习到 顺序语句 分支语句 If判断,switch,while循坏,do..while循环,for循环,表达式中的真...,需要注意几点: 循环的初始条件是定义在外面的 只有while中条件表达式为真时,才执行里面的语句体 while循环中应该有循环变量的更新,否则它会造成死循环 06 do...while循环 创建一个执行指定语句的循环...与while的区别是: whle循环是先判断后执行,而do..while是先执行,后判断 当第一次条件不成立时,while不会执行,而do-while无论是否成立都至少会执行一次 循环中每次都会计算的表达式...; } console.log(getSum(3)); 07 for循环 用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔,后跟一个用于在循环中执行的语句 应用场景...可以用forEach,map等一些迭代器方法替代的 08 表达式中的真(true)与(false)假 在上面的if语句,while语句,do..while,以及for循环,都离不开条件表达式,而条件表达式的结果

    2.8K20

    【C语言基础篇】结构控制(下)转向语句break、continue、goto、return

    0; } 3. break在 do…while 循环中 #include int main() { int i = 1; do { if (i == 5) break...,在while循环、for循环和do...while循环中的使用方法和效果相同。...语句后边的部分不再执行,直接进入下一次循 下面依然以打印1-10的数字为例,分别展示continue在三种循环中的使用和效果 1. continue在 while 循环中 #include while循环中使用continue一样进入死循环) 打印结果为1 2 3 4 6 7 8 9 10 3. continue在 do...while 循环中 #include<stdio.h...: 在while循环和do...while循环中,如果continue刚好跳过了循环变量调整部分,将会导致死循环 而在for循环中,由于循环变量调整部分是单独拿出来的,所以使用continue不会导致死循环

    1.5K10

    从关机小游戏学 C 语言:分支循环 + 关键字(breakcontinue)实战

    do while循环的执⾏流程 在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的 结果是!...所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅ 八、break和continue语句 循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是...那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果 continue举例 continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码...未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现 在这⾥我们也可以对⽐⼀下 while 循环和 for 循环中 continue 的区别: do...while循环中的break和continue do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样,⼤家下来可以⾃⾏测试并体会 九、goto 语句

    13310

    OushuDB-PL 过程语言-控制结构

    如果返回简单类型,那么可以 使用任何表达式,同时表达式的类型也将被自动转换成函数的返回类型,就像我们在赋值中描述的那 样。如果要返回一个复合类型的数值,则必须让表达式返回记录或者匹配的行变量。...循环: 1). LOOP LOOP定义一个无条件的循环,直到由EXIT或者RETURN语句终止。可选的label可以由EXIT和 CONTINUE语句使用,用于在嵌套循环中声明应该应用于哪一层循环。...CONTINUE 如果没有给出label,CONTINUE就会跳到最内层循环的开始处,重新进行判断,以决定是否继续执行循 环内的语句。如果指定label,则跳到该label所在的循环开始处。...循环,在该循环中可以遍历命令的结果并操作相应的数据,见如下示例: PL/pgSQL还提供了另外一种遍历命令结果的方式,和上面的方式相比,唯一的差别是该方式将SELECT 语句存于字符串文本中,然后再交由...异常捕获: 在PL/pgSQL函数中,如果没有异常捕获,函数会在发生错误时直接退出,与其相关的事物也会随之回 滚。我们可以通过使用带有EXCEPTION子句的BEGIN块来捕获异常并使其从中恢复。

    3.6K20

    【C++ 程序设计入门基础】- 第3节-循环结构02

    查看运行结果 while、do while的区别 for、while的区别 1、 关于 for 语句省略判定条件时的案例 查看运行结果 2、关于 for 循环判定可以指定初始变量值,这个看结果体就知道...3、如果循环体中包含continue,for语句跳到循环更新处,while语句直接跳到循环条件处。 输入一个整数n,输出1~n的所有整数,跳过3的倍数。...while、do while的区别 while语句是先判断循环条件,再决定是否执行循环体。 do while语句是先执行循环体,再判断循环条件,至少执行一次循环体。...左边 for 循环中,遇到 continue,下一步程序直接到循环更新的 i++; 右边 while 循环中,遇到 continue ,下一步程序直接到循环条件判定的 i<=n; 此处需要特别注意 while...下一节,给大家讲解 C++ 中关于函数的用法。

    33010
    领券