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

关于线程的问题

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

  • 写回答

3条回答 默认 最新

  • xiaoyingSUN 2011-07-25 15:00
    关注

    下面2个问题是我一个前辈给我讲的(感觉很有用)

    Thread.sleep(1000) 在1000毫秒后这个线程会被继续执行么?
    答案是,不一定,所以你所谓的“只是停留一段时间”是不准确的
    sleep只是告诉机器,接下来这段时间我不参与竞争CPU
    可是之后呢?也许正好有一个线程占用着CUP,那就要等它挂起或者结束才能重新分配,之后还要看各个线程的优先级来决定到底执行谁,可能你一个sleep3秒要等3天才轮的上你 (打比方哈)

    第2个问题就是sleep(0)的含义,sleep零不等于没有sleep么
    这个的作用是很明显的
    它会让当前线程在释放CPU的同时竞争CPU,这个时候CPU就会按照优先级重新分配,你明明就没睡,眨了下眼,就分配给别人了

    很多时候体会不到他的作用,是因为面对的情况相对单纯
    正如你说的,感觉每个线程都是停留了一下
    也许是因为你的多线程优先级没有什么太大差别,大家都是乖乖排队,木有突然插队的
    而每个线程处理时间也很短,不会明显影响别的进程,等等
    总之我个人理解的sleep的作用
    与其说是释放CPU,我更偏向于让CPU重新合理分配

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

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部