我家猫猫叫火腿儿
2021-09-30 17:49
采纳率: 100%
浏览 46
已结题

关于线程执行顺序的问题


public class MyThread extends Thread{
    public void run(){
        System.out.println("1");
    }
    public static void main(String[] args){
        MyThread mt = new MyThread();
        mt.start();
        //System.out.println("Now "+Thread.currentThread().getName());
        Thread.currentThread().yield();
        System.out.println("2");
    }
}

概括一下代码就是线程输出1,主线程输出2
直接上代码图,在屏蔽掉那段Now 的输出文本后,输出结果是

2
1

进程已结束,退出代码为 0

也就是说,一开始cpu执行主线程的时候,我让主线程执行yield方法回到可运行状态,他再一次获得了执行的机会,请问是主线程优先级非常高吗?

//////////////////////////////////////////////////////////////////
可是在加上那段之前被屏蔽的代码时,输出结果就变成了这样
1
Now main
2

进程已结束,退出代码为 0

也就是说在加上一行System.out.println之后,主线程的优先级就被降低了?我居然可以用field使得主线程让出CPU并且被实例出来的线程占领了?为什么仅仅一个System.out.println就可以改变优先级呢?很不理解,希望能清晰地帮我讲清楚,谢谢!

1条回答 默认 最新

相关推荐 更多相似问题