慕娘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方法。当两个线程都停止后,舞台线程继续执行直到结束。
兄弟你牛啊,听了你的解释后,恍然大悟啊
哦哦哦
深入浅出Java多线程
186068 学习 · 472 问题
相似问题