java中Thread.sleep(1000)问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中Thread.sleep(1000)问题相关的知识,希望对你有一定的参考价值。
如图:Thread.sleep(1000) 位置放置的不同,如何解释这两种情况呢
原本的意思是加入Thread.sleep(1000)用于降低CPU的使用率,但是开始没发现位置放错了,放在了if 里,两种情况下win7(32位)系统都可正常运行,但是后者放在 if 里在win7(64位)上出错,while始终不能结束,出现类似死锁的情况,逻辑明白,但是这个错误不明白的
第一种: 判断 hasWorkThread
a) 如果没有休眠的任务,就执行if里面的内容,break 跳出,后面的sleep不执行
b) 如果休眠的任务,就再休眠,那么循环依次后,再重复a,b,这是个死循环.
第二种:判断 hasWorkThread 如果没有休眠的任务,就让其休眠 ,然后再退出 如果有休眠的任务,直接跳到while结束位置,while不操作. 参考技术A 第一个 while 循环中, sleep(延时)在 (!pollingThradManager.getInstance().hasWorkThread())为 false 时执行。
第二个 while 循环中, sleep(延时)在(!pollingThradManager.getInstance().hasWorkThread())为 true 时执行。
假设:(!pollingThradManager.getInstance().hasWorkThread()) 为 true:
第一段代码的执行结果是赋值,然后跳出循环。
第二段代码的执行结果是赋值,延时,然后跳出循环。
假设:(!pollingThradManager.getInstance().hasWorkThread()) 为 false:
第一段代码的执行结果是延时,然后继续循环。
第一段代码的执行结果是直接继续循环。
that's the difference, I wish I can help you there.来自:求助得到的回答 参考技术A 这与系统没关系,2个while循环区别是:执行顺序改变了而已,前一个如果不进入if条件则是个死循环
后者如果如果不进入if条件也是个死循环追问
可是就在把sleep放在 if 外时,程序在64位下运行正常,郁闷在这儿
追答理论来说,64位兼容32位jdk,那么你试下把后者放在32位系统下运行下,如果没问题,就是64位系统的事
追问32位运行正常,只能继续调查了
追答绝对是64位系统对32位jdk支持不够!如果不是,请通知我
追问OK,3Q!
java Thread.sleep卡死问题
这是一个偶发问题。
在java中执行等待60秒:Thread.sleep(60*1000),
结果程序一直卡在这行代码,
在120秒后都没有执行结束。
这是什么原因?怎么解决啊?
也就是说,这个代码无法精确控制该进程在此处恰好停留1分钟。具体的等待时间=1分钟+在排队进程中的等候时间。
你也说了这个是一个偶发问题,也就是说在特殊情况下,该进程在队列中排列的时间过长导致了等待时间很长。不过考虑到cpu的时间片大小,你等待了120秒还卡在那里的情况比较少见,可能是电脑优化不好,cpu比较老旧,开的进程特别多,导致电脑比较卡。 参考技术A sleep会把当前线程暂停运行,所以后边的代码必须等sleep结束
这也是为什么java中会有多线程,就是把sleep的东西放到一个子线程里,这样主线程就不会卡住不动了 参考技术B 你确定是卡在sleep那么?
以上是关于java中Thread.sleep(1000)问题的主要内容,如果未能解决你的问题,请参考以下文章