有一个类继承Thread类,其对象为t,通过t.yield()方法调用让出当前线程t的执行;
想问的是调用Thread.yield()与调用t.yield()有什么区别?sleep:让当前正在执行的线程睡眠;也就是说就算通过对象来调用也就是该对象睡眠(该对象是当前对象了)
那通过Thread来调用,如果有多个线程在运行是要谁睡眠呢?注意: 请不要说什么静态方法通过类调用和对象调用一样,谢谢。

解决方案 »

  1.   

    "请不要说什么静态方法通过类调用和对象调用一样":事实上就是一样。yield()sleep()都是native的同一个方法,所以从代码看不出实现。
    但是java doc都说是操作currently executing thread。如果是以静态方式来调Thread.sleep(),jvm应该判断出调用Thread.sleep()的线程,然后对这个线程来sleep。
      

  2.   

    我们测试一下: Thread t=null;
    t.yield();运行时没有抛空指针异常, 所以:
    t.yield()其实还是调用的Thread.yield()同理 t.sleep()其实就是Thread.sleep(),也就是当前线程睡眠;
      

  3.   

    看 Jave API:
    yield
    public static void yield()Causes the currently executing thread object to temporarily pause and allow other threads to execute.yield是个静态方法,当然 “静态方法通过类调用和对象调用一样”