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()只能使同优先级的线程有执行的机会。