线程中的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等资源,这就是根本的不同