刚刚在书上看到下面一段话。有些疑问想问下绝大多数的操作系统都运行Timeslicing,简单地说就是操作系统会为每个线程分配一小段CPU时间(Quantum),时间一到就换下一个线程,即使现有的线程还没有结束。对于不支持Timeslising的操作系统,每一个线程必须完成后才能轮到下一个线程。在这样的操作系统中,如果想要让目前线程礼让一下其他线程,让他们有机会取得执行权,可以调用线程执行的yield()方法。
那是不是意味着,在WINDWOS平台上yield()几乎是没什么大作用?

解决方案 »

  1.   

    不能这么说吧  要看你的线程采用社么机制了 默认的是片刻机制(也叫竞争机制)就是LZ说的那种,给一段时间的.如果线程采用公平机制呢?就是时间等得长的先来,那yield就能派上用处了
    所以说不是取决于平台是取决于采用社么机制
      

  2.   

    lixiaoxue85(蛮野蛮) 还没学到机制的问题。不过大概有些了解了
      

  3.   

    我顶一个,正打算看Java.Concurrency.in.Practice.May.2006这本书给个地址,想看的就去下载吧,需要注册:
    http://www.itpub.net/showthread.php?s=&threadid=691117这应该是最新且经典的书了...
      

  4.   

    windows支持时间片轮换,如果在不支持时间片轮换的OS下,只能用yield()来让下个线程取得工作的机会。但是要保证优先级的平等,如果优先级不平等,释放本次线程后,优先级高的线程立马又抢过来了。等于没有使用yield()一样。其实在windows下yield()还是瞒有用的,主要是看你是否需要用到而已。
      

  5.   

    yield根据操作系统和jdk版本而不同
      

  6.   

    yield是作用不大,可能马上又抢到CPU了
      

  7.   

    谢谢jahcy()的回复,20分表示一下谢意
      

  8.   

    继续等待答案。jahcy()兄不好意思,没怎么弄明白这贴给分的方法,等本贴结束的时候我再给分
      

  9.   

    JAVA的虚拟机本身就不是用Timeslicing实现的吧
    当你对一个活动的线程调用yield()之后它就进入准备就绪状态,而如果当时有其他准备就绪的线程在
    等待CPU运行时间的话就会开始执行那个线程;如果发现并没有需要CPU时间的线程在就会立刻回到原
    线程的运行
      

  10.   

    用处还是很大的,尤其是for,while循环这类的.不用就跟死机一样,用了,就可以干其他事儿了.