public?class?ArmyRunnable?implements?Runnable?{
//這里使用volatile保證線程可以正確的讀取其他線程寫入的值
volatile?boolean?keepRunning=true?;
//軍隊(duì)線程
????//用來(lái)模擬作戰(zhàn)
public?void?run()?{
while?(keepRunning){
//發(fā)動(dòng)五連擊
for(int?i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"進(jìn)攻"+i+"次");
//讓出處理器的時(shí)間,下次誰(shuí)攻擊還不一定
Thread.yield();
}
}
System.out.println(Thread.currentThread().getName()+"停止攻擊");
}
}
public?class?Stage?extends?Thread?{
//復(fù)寫run方法
public?void?run(){
ArmyRunnable?armyTaskOfSuiDynasty=new?ArmyRunnable();
ArmyRunnable?armyTaskOfFarmer=new?ArmyRunnable();
//使用Runnable創(chuàng)建線程
Thread?armyOfSuiDynasty=new?Thread(armyTaskOfSuiDynasty,"隋朝軍隊(duì)");
Thread?armyOfFarmer=new?Thread(armyTaskOfFarmer,"農(nóng)民軍隊(duì)");
//線程的運(yùn)行
armyOfSuiDynasty.start();
armyOfFarmer.start();
//讓舞臺(tái)線程休眠,大家能夠?qū)P挠^看軍隊(duì)的廝殺
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();
}
}
這個(gè)程序運(yùn)行起來(lái)是個(gè)死循環(huán)啊
2015-12-18
噢。找到錯(cuò)誤了!不小心把
armyTaskOfSuiDynasty.keepRunning=false;
????????????armyTaskOfFarmer.keepRunning=false;
這兩句弄到try Catch中去了