在学习多线程的时候,有一个问题总会困扰着我--
关于sleep方法.当调用此方法时当前线程会在此sleep时间段内让出
执行权,自己处于阻塞状态.
问题是当多个线程并发执行时,都会调用该方法,都会休眠相同的时间,感觉就是
每个线程只是停留了一下,并不能体会到sleep方法的作用?
不知道大家是怎么理解这个问题的,求解!
下面2个问题是我一个前辈给我讲的(感觉很有用)
Thread.sleep(1000) 在1000毫秒后这个线程会被继续执行么?
答案是,不一定,所以你所谓的“只是停留一段时间”是不准确的
sleep只是告诉机器,接下来这段时间我不参与竞争CPU
可是之后呢?也许正好有一个线程占用着CUP,那就要等它挂起或者结束才能重新分配,之后还要看各个线程的优先级来决定到底执行谁,可能你一个sleep3秒要等3天才轮的上你 (打比方哈)
第2个问题就是sleep(0)的含义,sleep零不等于没有sleep么
这个的作用是很明显的
它会让当前线程在释放CPU的同时竞争CPU,这个时候CPU就会按照优先级重新分配,你明明就没睡,眨了下眼,就分配给别人了
很多时候体会不到他的作用,是因为面对的情况相对单纯
正如你说的,感觉每个线程都是停留了一下
也许是因为你的多线程优先级没有什么太大差别,大家都是乖乖排队,木有突然插队的
而每个线程处理时间也很短,不会明显影响别的进程,等等
总之我个人理解的sleep的作用
与其说是释放CPU,我更偏向于让CPU重新合理分配
再给补充一条,sleep(10)睡了10毫秒? 不一定
一些平台的时钟准确不到毫秒,像windows平台最多只能准确到15毫秒左右
[quote]再给补充一条,sleep(10)睡了10毫秒? 不一定
一些平台的时钟准确不到毫秒,像windows平台最多只能准确到15毫秒左右[/quote]
小妹我是你的粉丝。。。 :!: