大佬們,請問下如果在停戰(zhàn)結束命令發(fā)出前(給KeepRunning賦為false前),某個軍隊已經運行完了5次循環(huán),那么在下達停戰(zhàn)命令后,這個軍隊是一次不運行還是再重新運行一次完整的5次循環(huán)呢?
如果在停戰(zhàn)結束命令發(fā)出前(給KeepRunning賦為false前),某個軍隊已經運行完了5次循環(huán),那么在下達停戰(zhàn)命令后,這個軍隊是一次不運行 Or 再重新運行一次完整的5次循環(huán)呢?
下面截圖中農民軍在停戰(zhàn)命令發(fā)出前,已經運行完了一個完整的循環(huán),為什么還會運行一個完整的循環(huán)呢?
老師上課說的再重新運行0到5次循環(huán)是不是不準確?
2020-06-18
正常應該是這種結果吧,最好貼上你的代碼分析一下
2020-01-19
給你個老師的代碼,復制過去:
Stage.java:
package com.imooc.concurrent.base;
/**
?* 隋唐演義大戲舞臺
?*/
public class Stage extends Thread {
public void run(){
System.out.println("歡迎觀看隋唐演義");
//讓觀眾們安靜片刻,等待大戲上演
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("大幕徐徐拉開");
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("話說隋朝末年,隋軍與農民起義軍殺得昏天黑地...");
ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();
ArmyRunnable armyTaskOfRevolt = new ArmyRunnable();
//使用Runnable接口創(chuàng)建線程
Thread? armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty,"隋軍");
Thread? armyOfRevolt = new Thread(armyTaskOfRevolt,"農民起義軍");
//啟動線程,讓軍隊開始作戰(zhàn)
armyOfSuiDynasty.start();
armyOfRevolt.start();
//舞臺線程休眠,大家專心觀看軍隊廝殺
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("正當雙方激戰(zhàn)正酣,半路殺出了個程咬金");
Thread? mrCheng = new KeyPersonThread();
mrCheng.setName("程咬金");
System.out.println("程咬金的理想就是結束戰(zhàn)爭,使百姓安居樂業(yè)!");
//停止軍隊作戰(zhàn)
//停止線程的方法
armyTaskOfSuiDynasty.keepRunning = false;
armyTaskOfRevolt.keepRunning = false;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
* 歷史大戲留給關鍵人物
*/
mrCheng.start();
//萬眾矚目,所有線程等待程先生完成歷史使命
try {
mrCheng.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("戰(zhàn)爭結束,人民安居樂業(yè),程先生實現(xiàn)了積極的人生夢想,為人民作出了貢獻!");
System.out.println("謝謝觀看隋唐演義,再見!");
}
public static void main(String[] args) {
new Stage().start();
}
}
2019-04-16
你應該沒寫Thread.yieId()方法,老師講的沒有錯誤