class Person1 extends Thread{
public void run(){//
                    for(int i=0;i<100;i++){
System.out.println("新手学java");
Thread.yield();
Thread main = Thread.currentThread();
 System.out.println(main.getId()+","+main.getName());
} }
}
定义了一个类 在main方法输出后 System.out.println(main.getId()+","+main.getName());
这指令为什么能执行呢   Thread.yield(); 线程不是由running到runnable状态啊

解决方案 »

  1.   

    yiedld这个方法是让当前线程回到可执行状态,以便让具有相同优先级的线程进入执行状态,但不是绝对的。因为虚拟机可能会让该线程重新进入执行状态。
    让线程暂时停止可以选择sleep方法。比如Thread.sleep(1000),当前线程睡眠1秒。需要知道的是,1秒后,线程是回到可执行状态,并不是执行状态,什么时候执行那是由虚拟机来决定的。所以sleep(1000)并不是在睡眠1秒后立即执行。
      

  2.   

    谢谢你 你说的我都知道
    我意思是说程序按顺序执行 到 Thread,yield();会不会跳出去了  就不执行下面的那个输出了
      

  3.   

    yield不一定会放弃对CPU的使用的,调度器完全可以忽略yield的hint而继续执行。文档上不建议使用yield。
      

  4.   

    http://freish.iteye.com/admin/blogs/1477715