public class Example extends Thread {
public static void main(String[] args) {
Example t1 = new Example();
Example t2 = new Example();
t1.start();
t2.start();
} public void run() {
System.out.print("1");
yield();
System.out.print("2");
}
}这一定输出1122吗?

解决方案 »

  1.   

    API的文档里:暂停当前正在执行的线程对象,并执行其他线程。这个是API的解释,我个人觉得会引起误解。所谓其他线程,其实是包含当前暂停线程的。
    也就是说,yield只是放弃了自己本次执行的权利,让所有线程都处于可运行状态,有JVM再次决定下一次运行哪个线程。这里面是包含自己的,也就是刚刚放弃运行的线程的。参考:Thread.yield到底是什么作用?如下程序输出什么?
      

  2.   

    恩,yield()是让当前线程暂停,这点与sleep()类似,只是不能由用户指定暂停多长时间,但需要特别注意的是yield()方法只能让同优先级的线程有执行的机会,也就是说yield()暂停当前进行的线程后还是可能继续执行那个刚被停止的“当前进行的线程”