多线程学习 一个面试题引发的思考

代码

“`
public void testThread(){
new Thread(new Runnable(){

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(“1”);
}}

).start();
Thread.yield();
System.out.println(“2”);
}

“`
Thread.yield();的作用是让当前线程让步,使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择。
说的很直白了其实。
而如果不加Thread.yield();那么“2”是会先打印的。原因就是start方法调用后在被调用(callee)的新线程上还要经过一些JVM内部的初始化动作才能跑到指定的入口方法。
so,应该是主线程执行完之后再执行已就绪的线程。

发表评论

邮箱地址不会被公开。 必填项已用*标注