线程优先级

线程优先级

public class ThreadTest extends Thread{
    public ThreadTest(String name){
        super(name);
    }
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(getName()+"正在运行"+i);
        }
    }

    public static void main(String[] args) {
        ThreadTest threadTest1 = new ThreadTest("线程1");
        ThreadTest threadTest2 = new ThreadTest("线程2");
        threadTest1.start();
        threadTest2.start();
        System.out.println("无敌是多么 多么寂寞");
    }
}

老师啊,普通线程不显先示设置高优级就一定抢不过主线程嘛,我运行好多次都是

System.out.println("无敌是多么 多么寂寞");

这条输出语句在第一行了

老师看下我的理解是不是对的

首先进入主方法,顺序执行主方法中第一,二条语句,都是只有主线程在参与,然后执行第三条启动线程一的语句,执行完之后,已经存在两个线程来抢占CPU时间片来运行,然后就是线程一没抢赢,主线程执行启动线程二的语句,同理,执行完之后有三个线程来抢占CPU时间片,然后还是主线程赢了并打印了那条语句

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小小 2022-04-07 11:31:48

同学你好,理解基本正确,首先进入主方法顺序执行主方法中第一、二条语句,都是只有主线程在参与,然后执行第三条启动线程一的语句,执行完之后已经存在两个线程来抢占CPU时间片来运行,线程的执行是随机不确定的,无法确定线程一、主线程哪个会先执行。即使设置了优先级,也只是会提高了优先级高的线程优先执行的概率,但执行结果仍是随机的,设置优先级并不是说执行完优先级高的再执行优先级低的,而是会使得优先级高的线程比优先级低的线程优先执行的概率高。

祝学习愉快~

  • 提问者 慕楠枫桥 #1

    线程执行是随机的,主方法中最后那条输出语句总是在第一行的原因(我的问题主要是那条输出语句为啥运行很多次却还是老是输出在第一行),有没有可能是线程1或者线程2虽然已经抢到了CPU时间片,但是主线程并没有等它们开始执行,就已经抢先执行了呢

    2022-04-07 14:36:02
  • 好帮手慕小小 回复 提问者 慕楠枫桥 #2

    同学你好,程序启动先执行主方法,执行到主方法中第一句时其他线程还未启动,故不存在线程1或者线程2虽然已经抢占了CPU时间片的情况。其他线程启动后,主方法中后续内容执行与其他线程执行是随机的。

    祝学习愉快~

    2022-04-07 15:07:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师