为了账号安全,请及时绑定邮箱和手机立即绑定

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

还是说两种方法都可以?

真心求教!

正在回答

3 回答

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

0 回复 有任何疑惑可以回复我~
#1

greenhandc 提问者

非常感谢!
2015-12-18 回复 有任何疑惑可以回复我~
#2

greenhandc 提问者

让线程休眠包不包括armyTaskOfSuiDynasty,和Thread armyOfFarmer两个线程呢
2015-12-18 回复 有任何疑惑可以回复我~

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

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

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

3 回复 有任何疑惑可以回复我~
#1

黄森huang

大神,点赞
2016-10-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
深入浅出Java多线程
  • 参与学习       186088    人
  • 解答问题       464    个

带你一起深入浅出多线程,掌握基础,展望进阶路线

进入课程

关于sleep();

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信