public?class?ArmyRunnable?implements?Runnable?{
//這里使用volatile保證線程可以正確的讀取其他線程寫入的值
volatile?boolean?keepRunning=true?;
//軍隊線程
????//用來模擬作戰
public?void?run()?{
while?(keepRunning){
//發動五連擊
for(int?i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"進攻"+i+"次");
//讓出處理器的時間,下次誰攻擊還不一定
Thread.yield();
}
}
System.out.println(Thread.currentThread().getName()+"停止攻擊");
}
}
public?class?Stage?extends?Thread?{
//復寫run方法
public?void?run(){
ArmyRunnable?armyTaskOfSuiDynasty=new?ArmyRunnable();
ArmyRunnable?armyTaskOfFarmer=new?ArmyRunnable();
//使用Runnable創建線程
Thread?armyOfSuiDynasty=new?Thread(armyTaskOfSuiDynasty,"隋朝軍隊");
Thread?armyOfFarmer=new?Thread(armyTaskOfFarmer,"農民軍隊");
//線程的運行
armyOfSuiDynasty.start();
armyOfFarmer.start();
//讓舞臺線程休眠,大家能夠專心觀看軍隊的廝殺
try?{
Thread.sleep(50);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
armyTaskOfSuiDynasty.keepRunning=false;
armyTaskOfFarmer.keepRunning=false;
try?{
armyOfFarmer.join();
}?catch?(InterruptedException?e1)?{
e1.printStackTrace();
}
}
}
public?static?void?main(String?[]args){
new?Stage().start();
}
}
這個程序運行起來是個死循環啊
2015-12-18
噢。找到錯誤了!不小心把
armyTaskOfSuiDynasty.keepRunning=false;
????????????armyTaskOfFarmer.keepRunning=false;
這兩句弄到try Catch中去了