首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有了 for 循环为什么还要 while(1)?

有读者问题了类似这样的问题:while(1) 和 for(;;)它们不都是无限循环吗,作用应该一样啊,它们到底有什么区别?...要回答这个问题,其实你各自编写一段while(1) 和 for(;;)的代码,编译对比一下代码大小和汇编文件,你就大概知道了。...1.while语法表达 while( 表达式 ) { 语句 } 其中: 表达式:是循环条件 语句:为循环体。...注 意 文末有:7701页互联网大厂面试题 while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。...5.循环结束,执行for语句下面的一个语句。 执行过程可用下图表示: while(1)和for(;;)异同点 这里先说一下结论,然后再验证验证结论。

60820

Python 为什么不设计 do-while 循环结构?

那么,为什么 Python 不提供这种语法结构呢,这种现状的背后有何种设计考量因素呢?...在回答这个问题之前,让我们再仔细思考一下 do-while 语法可以解决什么问题,看看使用这种结构能带来什么好处? 最显而易见的好处是:do-while 语法保证了会先执行一遍循环体代码。...分析完 do-while 的好处后,让我们回到主题:Python 为什么不需要设计 do-while 循环语法呢?...expression ":" suite ["else" ":" suite] (PS.在本系列的下一篇文章,我们将解释为什么 Python 要支持 while-else 语法)...有了 do 子句后,很容易就能实现 do {...} while (0) 的跳转控制效果。 但是,这个 PEP 遭到了一些核心开发者的反对。

1.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

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

前言最近逛 CSDN 看到一篇文章,文章大意是说为什么循环中不推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService...Demo { private static final boolean FLAG = true; public static void main(String[] args) { while...// do something }}上面的代码你可能会得到下面的警告:Call to ‘Thread.sleep()’ in a loop, probably busy-waiting// 循环中调用...sleep 可能会导致忙等待 // 如 FLAG 变量状态未改变 那么线程可能一直循环,并不断进行线程挂起和唤醒原因是否正确主要原因和原文博主所说有很大的关系但不完全正确:我们都知道 Java 线程实际对应着操作系统中的一个线程

68130

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

,由于 stopReqested 的更新值在主内存中,而线程栈中的值不是最新的,所以会一直循环,线程并不能停止。...最开始的代码,一直处于试了循环中,CPU 处于一直被饱受占用的时候,这个时候 CPU 没有时间,JVM 也不能强制要求 CPU 分点时间去取最新的变量值。...这个时候CPU就有可能有时间去保证内存的可见性,于是while循环可以被终止。...其实,也可以在 while 循环里面加上 sleep ,让 run 方法放弃 cpu ,但是不放弃锁,这个时候由于 CPU 有空闲的时候就去按照 JVM 的要求去保证内存的可见性。如下所示。...run 方法里面休息了 3 秒,cpu 有充足的空闲时间去取变量的最新值,所以循环执行一次就停止了。

1.5K50

【Python编程导论】第六章- 测试与调试

基本概念 测试指通过运行程序以确定它是否按照预期工作。 调试则指修复已知的未按预期工作的程序。 测试和调试的 关键就是将程序分解成独立的部件,可以在不受其他部件影响的情况下实现、测试和调试。... 对于每个for循环,需要以下测试用例: 未进入循环(例如,如果使用循环遍历列表中的所有元素,则必须测试空列表); 循环体只被执行一次; 循环体被执行多于一次;  对于每个while循环: 包括上面...例如,对于以while len(L) > 0 and not L[i] == e开始的循环,测试用例应该包括因为len(L)不大于0和因为L[i] == e 而跳出循环的情况。...在这个阶段中,测试者构建并执行测试, 用来确定代码的每个独立单元(例如,函数)是否正常工作 第二个阶段称为 集成测试,用来确 定整个程序能否按预期运行。 在工业界,测试过程通常是高度自动化的。...你应该扪心自问,这个错误能够解释所有观测到的症状,还是只是冰山一角。如果是后者,最好将对这个错误的处理与其他修改结合考虑。

1.6K30

并发编程中的大坑:你的直觉&有序性问题

04 更匪夷所思的编译器优化 前面我们基于jcstress的测试程序没有使用while()循环来检查isReady,而是用了if()语句,为什么要做这种替换呢?...直接用while()循环来验证并发问题不是更直接吗?...上面的代码在 while (!isReady) {}; 上死循环,再没机会跳出了。 怎么会这样?actor1()可能会慢于actor2()的执行,但也定也慢不过1秒,那为什么会发生死循环呢?...我们直觉总是以为每次while()循环都会重新在内存中读取isReady这个变量,但是实际上,编译优化后的代码,仅仅在第一次循环时读了一次,之后所有的循环都没重新再去内存中读取isReady这个变量,从而导致...while()循环死在此处,再也无法跳出。

48220

Java并发编程之CAS第三篇-CAS的缺点

CAS的缺点 一:do while循环时间长的话开销大 从源码中(见上图),我们可以知道do while中的while返回true会一直循环下去(具体分析步骤见上一篇:《Java并发编程之CAS二源码追根溯源...A线程拿着自己工作区copay的副本值i=2020和主内存的值i=2020。正好相等,这个时候会,主内存的共享变量相对于A线程来说,是没有变化的。但是实际上是有变化的(B线程确实操作过的。...为什么呢?分析思路见:《Java并发编程之CAS一理解》篇文章的三:cas代码演示部分。...我们修改之后再来看: 运行结果: 发现心中女神已经更新为佟丽娅了 三:ABA问题解决 ABA问题产生的根本原因是因为:只是线程自己工作空间的变量预期值(副本)和主内存中的值进行了比较。...我们来看看运行结果和我们预期结果: 运行结果,和我们预期结果是一致的。说明,添加这个时间戳(版本号)可以解决ABA问题

1.6K00

在Java8的foreach()中使用returnbreakcontinue

表达式处理集合时,发现对return、break以及continue的使用有点迷惑,于是自己动手测试了一下,才发现在使用foreach()处理集合时不能使用break和continue这两个方法,也就是说不能按照普通的...for循环遍历集合时那样根据条件来中止遍历,而如果要实现在普通for循环中的效果时,可以使用return来达到,也就是说如果你在一个方法的lambda表达式中使用return时,这个方法是不会返回的,而只是执行下一次遍历...想知道这是为什么,在Stack Overflow中找到一个答案,主要是说foreach()不是一个循环,不是设计为可以用break以及continue来中止的操作。...---- 针对问题: 1、foreach()循环操作元素时,是否会退出lambda表达式,如下图所示: ?

1.9K50

数据结构_链表

类型的变量,就要传它的地址int*;要改变int *,就要传二级指针int **> 第三条非常非常重要,理解了的话在链表这里就能绕明白了,在指针方面的理解也算是比较到位了 ---- [toc] ---- 为什么要使用链表...顺序表的优点: 连续物理空间,方便通过下标随机访问 缺点: 插入数据,空间不足时需要扩容,扩容有性能消耗 头部或中间位置插入或删除数据,需要挪动其他数据,效率较低 可能存在一定的空间占用,浪费空间;不能按需申请和释放空间...但在物理(存储)上不一定是连续的 现实中的结点一般都是从堆上申请出来的 从堆上申请的空间,都是按照一定的策略进行分配的,两次申请的空间可能连续,可能不连续 链表的分类 单向或双向 带头或不带头 循环或非循环...带头双向循环链表:结构最复杂,一般用来单独存储数据用。实际中使用的链表数据结构,都是带头双向循环链表。...另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而比较简单了,后面我们代码实现了就知道了。

19210

Flex布局中一个不为人知的特性

然后又试了试,发现加 min-width: 0 也可以解决这个问题。 bug 改好了,但是不知道为什么加个 overflow:hidden 或者 min-width: 0 就好了。...editors=1100 如果我们删除掉 div class=main 那一层,那么表现良好,即每个 item 都按照预期缩小了。...对于滚动容器,min-width 的值是 0(默认讨论水平布局) 读到这里,我意识到这个问题跟Flex嵌套应该没什么关系,不嵌套应该也一样存在这个问题,于是我又新写了个demo,可以戳这个查看:https...editors=1100 当 item 的内容 child 宽度是250px时,此时也不能按预期缩小。可能这个时候,第一反应是给 item 加 flex-shrink,然而并木有用。...这个时候就乖乖按照规范教的操作吧,例如,我们给 item 设置 min-width:0 ,这个时候,item 会按照预期缩小,平分500px的大小。

1K40

滚雪球学Java(15):节约时间,提升效率:掌握JavaSE-while循环语句的技巧与窍门

while循环工作原理while循环工作原理很简单:当循环条件为true时,循环会一直执行,直到循环条件为false。...int i = 0;while (i < 5) { System.out.println(i); i++;}在这个例子中,我们初始化一个计数器i,并在while循环中使用它。...("The sum is " + sum);在这个例子中,我们初始化一个计数器i和一个变量sum,然后在while循环中计算从1到10的数字之和。...综上所述,该测试方法主要用于验证findElement方法的功能是否正确,并测试了不同的输入情况下的预期输出。全文小结在Java编程中,while循环语句是一种基本的循环语句。...通过对while循环的学习和实践,我们可以更好地理解和运用这个循环语句,提高我们的编程能力。

9221

JavaScript 事件循环竟还能这样玩!

本文将深入探讨事件循环工作原理,并展示如何基于这一原理实现一个更为准确的 setTimeout、setInterval 什么是事件循环?...事件循环工作原理 事件循环工作原理可以简化为以下几个步骤: 执行调用栈中的任务: JavaScript 引擎会从调用栈中取出并执行最顶层的任务,直到调用栈为空。...处理任务:微任务队列为空后,事件循环检查任务队列并执行所有任务,因此输出 Timeout callback。 为什么 setTimeout 不准确?...: 设置预期的下一次执行时间 expected。...●为什么 0.1+ 0.2 != 0.3,如何让其相等? ●聊聊对 this 的理解? ●JavaScript 为什么要进行变量提升,它导致了什么问题?

5910

一个困扰我122天的技术问题,我好像知道答案了。

这次的变动点是在 while 循环里面加了一个 100ms 的睡眠。 来,你再猜一下。这个程序还是不是死循环呢?...上面这个程序还是不是死循环呢? 执行之后你会发现,这个程序居然正常结束了,但是你还是不知道为什么,你只能再次大喊一声:卧槽,真TM绝了! ?...这个地方的 while 循环和上面的如出一辙。所以你知道为什么这个程序为什么不会正常结束了吗? 你不仅知道了,而且你还可以回答的比 volatile 更深入一点。...这时候 CPU 就可能有时间去保证内存的可见性,于是 while 循环可以被终止。 (别说锁粗化了,我觉得这个回答肯定是不对的。)...根据这个回答,我解释一下为什么我们的测试程序没有死循环

90110

volatile-你没见过的船新版本

所以我们需要一种机制,在主存的值修改后,及时地通知所有线程,保证它们都可以看到这个变化。...也就是说,在主线程看来,在没有特殊情况下,flag 永远为false,while(!...可以看到,子线程确实修改了flag的值,主线程也和我们预期一样,看不到flag的变化,一直在死循环。...如果给flag变量加一个volatile呢,预期结果是,子线程修改变量对主线程来说是可见的,主线程会退出循环。 ?...为什么不能保证原子性: 这要从num++操作开始讲起,num++操作可以分为三步: 读取i的值,装载进工作内存 对i加1操作 将i的值写回工作内存,刷新到主存中 我们知道线程的执行具有随机性,假设a线程和

23720

每天 3 分钟,小闫带你学 Python(八)

总结 1.只要是重复做一件事情,就可以使用循环。 2.循环是为了提高代码的重复利用率,节省工作量。...i=0 满足条件,因此执行 while 内部代码,直到 i=5 时停止循环。 i+=1 代表每次执行完后,将 i 进行加 1 操作,以保证程序按照预期进行。...') j += 1 print() i += 1 print 函数本身具有换行的作用,因此我们可以在内层循环结束后,使用换行功能,达到预期效果。...为什么能换行呢?之前没有讲过,此处作为拓展内容,print 函数中有一个 end 参数,默认是 end='\n'(之前讲解过 \n 为换行符)。这也就解释了 print("* ",end='')。...1.3 for 循环 for 循环while 循环一样,也可以达到循环的效果,而且更加简洁。一般工作中,除了特殊的场景,很少人使用 while 循环。但是各有千秋,因场景而选择。

62920

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券