Java编程语言中sleep()和yield()的区别

转自:http://developer.51cto.com/art/201003/189465.htm

1. Thread.yield(): 
    api中解释: 暂停当前正在执行的线程对象,并执行其他线程。 
    注意:这里的其他也包含当前线程,所以会出现1212以下结果。 
public class Test extends Thread {    
  public static void main(String[] args) {    
    for (int i = 1; i <= 2; i++) {    
      new Test().start();    
    }    
  }    
   
  public void run() {    
    System.out.print("1");    
    Thread.yield();   //如果没有这句,输出结果一定是1212 
    System.out.print("2");    
  }    
}   
    输出结果: 1122或者1212 

2. Thread.sleep(long millis): 
     解释:使当前线程暂停millis所指定的毫秒,转到执行其它线程。 

总结:

1) sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。

2) sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。

原文地址:https://www.cnblogs.com/x_wukong/p/3442144.html