我的一些见解

来源:2-5 Java线程-隋唐演义实战开发---关键先生

慕娘5114374

2018-11-15 15:53

public class Stage extends Thread {

    public void run(){
        ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();
        ArmyRunnable aryTaskOfRevolt = new ArmyRunnable();

        //使用Runnable对象接口创建线程
        Thread armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty,"隋军");
        Thread aryOfRevolt = new Thread(aryTaskOfRevolt,"起义军");

        //启动
        armyOfSuiDynasty.start();
        aryOfRevolt.start();
        System.out.println("帷幕拉开,表演开始");
        //舞台线程休眠
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        armyTaskOfSuiDynasty.keepRunning = false;
        aryTaskOfRevolt.keepRunning = false;

        try {
            //主线程等待2个线程结束
            armyOfSuiDynasty.join();
            aryOfRevolt.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("关闭舞台");
    }

    public static void main(String[] args) {
        Stage stage = new Stage();
        stage.setName("舞台");
        stage.start();
    }
}

一开始看完后有点懵。仔细想了想,运行了几次,一点小理解。

首先,main方法启动了舞台线程,执行run方法。

顺着顺序执行到舞台线程休眠(50毫秒),这个时候给了隋军和起义军这两个线程使用处理器资源的时间(前期虽然有2个线程都已经开始,但他们没有处理器使用权),所以这两个线程中的一个会首先执行,因为for循环中有yield,所以处理器在50毫秒之内被2个线程随机使用,50毫秒以后,舞台线程也加入处理器的争取中,一旦争取到了  就会往下执行,keepRunning设置为false,然后两个线程执行join方法。当两个线程都停止后,舞台线程继续执行直到结束。

写回答 关注

2回答

  • 我爱孙佳怡
    2019-05-21 22:47:31

    兄弟你牛啊,听了你的解释后,恍然大悟啊

  • 蓝色的老虎
    2019-05-11 00:23:23

    哦哦哦

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186068 学习 · 472 问题

查看课程

相似问题