關于sleep();
public?class?Stage?extends?Thread?{
//復寫run方法
public?void?run(){
System.out.println("歡迎觀看隋唐演義!");
try?{
Thread.sleep(5000);
}?catch?(InterruptedException?e2)?{
e2.printStackTrace();
}
System.out.println("大幕徐徐拉開");
try?{
Thread.sleep(5000);
}?catch?(InterruptedException?e2)?{
//?TODO?Auto-generated?catch?block
e2.printStackTrace();
}
System.out.println("話說隋朝末年,各路藩王和隋軍殺的是昏天黑地");
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();}
System.out.println("正當雙方激戰正酣,半路殺出了個程咬金");
Thread?Chengyaojin=new?KeypersonThread();
Chengyaojin.setName("程咬金");
System.out.println("程咬金的理想就是結束戰斗,使得百姓安居樂業");
//軍隊停止戰斗
armyTaskOfSuiDynasty.keepRunning=false;
armyTaskOfFarmer.keepRunning=false;
try?{
Thread.sleep(2000);
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
Chengyaojin.start();
//所有線程等待程咬金完成自己的歷史使命
try?{
Chengyaojin.join();
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
System.out.println("程咬金完成了自己的理想,結束了戰斗,使得人民能夠安居樂業");
System.out.println("感謝觀看隋唐演義!");
}
public?static?void?main(String?[]args){
new?Stage().start();
}讓舞臺休眠,大家看廝殺部分,為什么要寫成Thread.sleep(); 按照字面的理解不是Stage.sleep()l;么
還是說兩種方法都可以?
真心求教!
2015-12-18
Thread.sleep();這個方式是使得當前在運行的線程休眠,作用就是讓 Stage休眠,如果單純的 Stage.sleep()是沒有這個方法的。
2015-12-18
首先你要知道sleep這個方法是屬于哪個類的。從代碼上看很明顯是屬于Thread類的方法,而且他還是一個靜態方法,可以用類名直接調用的。
然后,再看你的Stage類,你是繼承了Thread類,說明父類Thread類的sleep方法子類也是可以調用的,當你寫成this.sleep()和Thread.sleep()方法調用的其實是同一個sleep方法,也就是父類Thread里的sleep方法。
結論是,你用this.sleep()和Thread.sleep()作用是相同的。只不過你的Stage類沒有重寫父類的sleep方法,所以你不能使用Stage.sleep()這樣調用。