用最初的心做永久的事 2011-07-25 21:19
浏览 199
已采纳

关于线程的问题

在学习多线程的时候,有一个问题总会困扰着我--
关于sleep方法.当调用此方法时当前线程会在此sleep时间段内让出
执行权,自己处于阻塞状态.
问题是当多个线程并发执行时,都会调用该方法,都会休眠相同的时间,感觉就是
每个线程只是停留了一下,并不能体会到sleep方法的作用?
不知道大家是怎么理解这个问题的,求解!

  • 写回答

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重新合理分配

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥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线路