黑马程序员技术交流社区

标题: 多线程问题. [打印本页]

作者: 朱元强    时间: 2011-9-26 00:03
标题: 多线程问题.
调用  yield()方法有什么作用?
作者: 匿名    时间: 2011-9-26 00:58
yield 方法使当前线程让出 CPU 占有权,但让出的时间是不可设定的。实际上,yield()方法对应了如下操作: 先检测当前是否有相同优先级的线程处于同可运行状态,如有,则把 CPU 的占有权交给此线程,否则,继续运行原来的线程。所以yield()方法称为“退让”,它把运行机会让给了同等优先级的其他线程。
作者: 匿名    时间: 2011-9-26 07:52
yield的真正用途是:使当前线程从执行态变为可执行态,也就是就绪态吧。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次不会执行到了。
作者: 匿名    时间: 2011-9-26 09:06
使正在执行的线程临时暂停,并允许其他线程执行
作者: 匿名    时间: 2011-9-26 09:22
使当前线程从执行态转为就绪态吧。是“让权等待”吧
作者: 匿名    时间: 2011-9-26 14:14
暂停当前正在执行的线程对象,并执行其他线程。
作者: 匿名    时间: 2011-9-26 16:12
那接着问一下 ,它与wait()有什么不同呢
作者: 匿名    时间: 2011-9-27 14:15
这几天刚好也看了多线程这章,查阅资料总结了点 yield(),sleep()以及wait()的区别 贴出来跟大家分享一下
从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列)。并且在某一时刻cpu只为ready queue中位于队列头部的线程服务。
但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield。
或者当前正在被服务的线程需要睡一会,醒来后继续被服务,这就是sleep。
sleep方法不推荐使用,可用wait。
线程退出最好自己实现,在运行状态中一直检验一个状态,如果这个状态为真,就一直运行,如果外界更改了这个状态变量,那么线程就停止运行。
sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;

yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;

yield()只能使同优先级的线程有执行的机会。
当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。
waite() 和notify()因为会对对象的“锁标志”进行操作,所以它们必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生 IllegalMonitorStateException的异常。
作者: 匿名    时间: 2011-9-28 17:32
标题: 多态
请问下面向对象中多太是怎么回事   不是很理解
作者: 匿名    时间: 2011-9-28 21:10
标题: 回复 楼主 的帖子
yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
作者: 匿名    时间: 2011-9-28 21:29
标题: 回复 9 # 的帖子
多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为。例如,狗类调用其父类动物类的“叫声”方法时产生的行为是“汪汪”,而猫类调用其父类动物类的“叫声”方法时产生的行为是“喵喵”。
作者: 匿名    时间: 2011-9-30 23:00
标题: 回复 7 # 的帖子
wait()是释放执行权,并且释放锁,等待别人来唤醒自己。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2