日期:2014-05-20  浏览次数:20774 次

关于简单的Thread问题
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状态啊

------解决方案--------------------
yiedld这个方法是让当前线程回到可执行状态,以便让具有相同优先级的线程进入执行状态,但不是绝对的。因为虚拟机可能会让该线程重新进入执行状态。
让线程暂时停止可以选择sleep方法。比如Thread.sleep(1000),当前线程睡眠1秒。需要知道的是,1秒后,线程是回到可执行状态,并不是执行状态,什么时候执行那是由虚拟机来决定的。所以sleep(1000)并不是在睡眠1秒后立即执行。
------解决方案--------------------
yield不一定会放弃对CPU的使用的,调度器完全可以忽略yield的hint而继续执行。文档上不建议使用yield。
------解决方案--------------------
http://freish.iteye.com/admin/blogs/1477715