问答详情
源自:2-5 Java线程-隋唐演义实战开发---关键先生

关于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;么

还是说两种方法都可以?

真心求教!

提问者:greenhandc 2015-12-18 14:55

个回答

  • 惫懒sloth
    2015-12-18 15:29:11
    已采纳

    Thread.sleep();这个方式是使得当前在运行的线程休眠,作用就是让 Stage休眠,如果单纯的 Stage.sleep()是没有这个方法的。

  • 乔小欠儿
    2015-12-18 16:46:06

    首先你要知道sleep这个方法是属于哪个类的。从代码上看很明显是属于Thread类的方法,而且他还是一个静态方法,可以用类名直接调用的。

    然后,再看你的Stage类,你是继承了Thread类,说明父类Thread类的sleep方法子类也是可以调用的,当你写成this.sleep()和Thread.sleep()方法调用的其实是同一个sleep方法,也就是父类Thread里的sleep方法。

    结论是,你用this.sleep()和Thread.sleep()作用是相同的。只不过你的Stage类没有重写父类的sleep方法,所以你不能使用Stage.sleep()这样调用。