什么时候用java Thread的sleep方法,怎么判断使用时机?

好像即时使用几个线程有时候不用sleep也能运行···... 好像即时使用几个线程有时候不用sleep也能运行··· 展开
 我来答
續寫丶那過厾
2012-10-18 · TA获得超过404个赞
知道小有建树答主
回答量:215
采纳率:50%
帮助的人:193万
展开全部
sleep()方法是属于线程本身的,直接调用Thread.sleep(毫秒数)就可以使用
sleep()主要是让当前线程进入休眠状态,不会释放锁,把时间片让给其他线程,等休眠时间结束,再继续执行。这里的再继续执行不是立马执行,也许并发时候,某一个线程优先级比较高,那么即使是休眠结束也不会执行,还得优先级高的先执行。

使用几个线程不用sleep()肯定可以运行啊!因为时间片在不停的轮转,你运行一会,我运行一会,轮流运行。。。

不是同步的线程获得锁是随机的而是获得时间片是随机的,synchronized处理锁机制,你好好看看吧!而且当指定优先级或有其他条件影响的时候,其实时间片也相当于不是随机的,必定优先级高的会先运行。
追问
怎么理解锁和时间片呢?
追答
锁,顾名思义就是被锁住了呗,呵呵!
还是举例吧!通俗易懂。

就课本上的例子吧!

例一:哲学家进餐问题

有几个哲学家同时进餐,围着一个圆形桌子,每个人左右两边都有一支筷子,而只允许每个人拿自己左边的筷子,那么也就是说每人只有一支筷子,那右边的另一支呢,则被别人拿走了,都想吃饭,且都不愿意放弃自己的筷子!所以每人只有一支,都在等着对方的那一支,就这样,形成了僵持状态,可怜的哲学家被活活的饿死了。。。你说要是哲学家是程序员多好的,知道死锁问题也就不会被饿死了,O(∩_∩)O哈哈~

例二:打电话问题吧

比如只有一个手机,有两个人,都想打电话,那该怎么办呢!也就是说,只能一个个使用呗,在使用的同时就相当上了锁,另一个人就不能用了!而打完电话就相当于释放了锁,另一个人才可以使用。

时间片,其实就是时间段,这个比较抽象,就是在那个时间执行程序。

例子:吃蛋糕

同学过生日,邀请大家聚餐,到了吃蛋糕的时候,刀子不见了,最后好吧,寿星比较豪放就让每人吃上几口,再给其他人吃,比如说隔30秒轮到下一个人吃,则这30秒就相当于时间片!当然在这个过程中,你可以把蛋糕吃完,也可以不吃完,呵呵,看你的胃口和人品了。
wj465771527
2012-10-17 · TA获得超过156个赞
知道答主
回答量:175
采纳率:0%
帮助的人:95.7万
展开全部
多线程异步的时候,当你要完成某个特定的需求的时候,可以用到,具体还要看完成什么功能,比如两个异步A,B,按理A,B是随机同时执行的,我的需求又要我先执行A一段时间,再执行B,这时候就可以SLEEP B一段时间
追问
如果我的需求都是同步,那就算多少个线程都不用sleep都行么,同步的线程们获得的锁都是随机的,不会出现内存溢出么?
追答
为什么要纠结SLEEP?不一定线程都要用SLEEP.如果是同步就更不需要SLEEP,同步都确定执行的顺序,你在线程里SLEEP只能改变当前线程,不影响整体执行顺序.比如ABCD ,同一时间内,只能执行A或B或C或D,当其中一个执行完了,再执行下一个.你在ABCD里SLEEP就没有意义了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式