greenhandc
2015-12-18 14:55
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;么
还是说两种方法都可以?
真心求教!
Thread.sleep();这个方式是使得当前在运行的线程休眠,作用就是让 Stage休眠,如果单纯的 Stage.sleep()是没有这个方法的。
首先你要知道sleep这个方法是属于哪个类的。从代码上看很明显是属于Thread类的方法,而且他还是一个静态方法,可以用类名直接调用的。
然后,再看你的Stage类,你是继承了Thread类,说明父类Thread类的sleep方法子类也是可以调用的,当你写成this.sleep()和Thread.sleep()方法调用的其实是同一个sleep方法,也就是父类Thread里的sleep方法。
结论是,你用this.sleep()和Thread.sleep()作用是相同的。只不过你的Stage类没有重写父类的sleep方法,所以你不能使用Stage.sleep()这样调用。
深入浅出Java多线程
186065 学习 · 502 问题
相似问题