在学习多线程的时候,有一个问题总会困扰着我--
关于sleep方法.当调用此方法时当前线程会在此sleep时间段内让出
执行权,自己处于阻塞状态.
问题是当多个线程并发执行时,都会调用该方法,都会休眠相同的时间,感觉就是
每个线程只是停留了一下,并不能体会到sleep方法的作用?
不知道大家是怎么理解这个问题的,求解!
关于线程的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- xiaoyingSUN 2011-07-25 23:00关注
下面2个问题是我一个前辈给我讲的(感觉很有用)
Thread.sleep(1000) 在1000毫秒后这个线程会被继续执行么?
答案是,不一定,所以你所谓的“只是停留一段时间”是不准确的
sleep只是告诉机器,接下来这段时间我不参与竞争CPU
可是之后呢?也许正好有一个线程占用着CUP,那就要等它挂起或者结束才能重新分配,之后还要看各个线程的优先级来决定到底执行谁,可能你一个sleep3秒要等3天才轮的上你 (打比方哈)第2个问题就是sleep(0)的含义,sleep零不等于没有sleep么
这个的作用是很明显的
它会让当前线程在释放CPU的同时竞争CPU,这个时候CPU就会按照优先级重新分配,你明明就没睡,眨了下眼,就分配给别人了很多时候体会不到他的作用,是因为面对的情况相对单纯
正如你说的,感觉每个线程都是停留了一下
也许是因为你的多线程优先级没有什么太大差别,大家都是乖乖排队,木有突然插队的
而每个线程处理时间也很短,不会明显影响别的进程,等等
总之我个人理解的sleep的作用
与其说是释放CPU,我更偏向于让CPU重新合理分配本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
- ¥20 Java-Oj-桌布的计算
- ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
- ¥20 有人知道这种图怎么画吗?
- ¥15 pyqt6如何引用qrc文件加载里面的的资源
- ¥15 安卓JNI项目使用lua上的问题
- ¥20 RL+GNN解决人员排班问题时梯度消失
- ¥60 要数控稳压电源测试数据
- ¥15 能帮我写下这个编程吗
- ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路