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

线程中的yield()方法????
public class Thread4 extends Thread{
   
  public Thread4() {
  }
  public void run(){
  for(int i=1;i<=10;i++){
  System.out.println(getName()+":"+i);
  yield(); //x1
  try{
  sleep(1000);
  }catch(InterruptedException ie){}
  }
  }
  public static void main(String[] args) {
  Thread4 t1=new Thread4();
  Thread4 t2=new Thread4();
  t1.start();
  t2.start();
  }
   
}
通过几次运行以上程序发现 yield()有无好象对程序的执行结果和效率没什么影响.
我知道 yield()方法使当前运行的线程对象退出运行状态,使其他线程得以运行.
请高手指点一下有无yield()方法的区别在哪里???谢谢了


------解决方案--------------------
yield方法是暂停当前进程,然后线程调度程序从线程池里面再选一个线程出来运行.
哪一个线程会被选中是不确定的,所以这并不保证刚暂停的线程不会再次被选出来运行.
------解决方案--------------------
线程在执行到yield()后就会让步,然后另外的线程就会执行
建议你这样就可以看到区别了
public class Thread4 extends Thread{ 

public Thread4() { 

public void run(){ 
for(int i=1;i <=10;i++){ 
System.out.println(getName()+":"+i+"前");
yield(); //x1 
System.out.println(getName()+":"+i+"中");
try{ 
sleep(1000); 
}catch(InterruptedException ie){} 
System.out.println(getName()+":"+i+"后");


public static void main(String[] args) { 
Thread4 t1=new Thread4(); 
Thread4 t2=new Thread4(); 
t1.start(); 
t2.start(); 




------解决方案--------------------
我说下我的理解吧
yeild只是让出CPU,避免贪婪线程抢占CPU 
但是yeild之后就不能保证其执行顺序了..跟sleep一样
------解决方案--------------------
yield会放弃该线程所占的资源,sleep会继续持有CPU等资源,这就是根本的不同