關(guān)于sleep();
public?class?Stage?extends?Thread?{ //復(fù)寫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創(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();} System.out.println("正當(dāng)雙方激戰(zhàn)正酣,半路殺出了個(gè)程咬金"); Thread?Chengyaojin=new?KeypersonThread(); Chengyaojin.setName("程咬金"); System.out.println("程咬金的理想就是結(jié)束戰(zhàn)斗,使得百姓安居樂業(yè)"); //軍隊(duì)停止戰(zhàn)斗 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("程咬金完成了自己的理想,結(jié)束了戰(zhàn)斗,使得人民能夠安居樂業(yè)"); System.out.println("感謝觀看隋唐演義!"); } public?static?void?main(String?[]args){ new?Stage().start(); }
讓舞臺(tái)休眠,大家看廝殺部分,為什么要寫成Thread.sleep(); 按照字面的理解不是Stage.sleep()l;么
還是說兩種方法都可以?
真心求教!
2015-12-18
Thread.sleep();這個(gè)方式是使得當(dāng)前在運(yùn)行的線程休眠,作用就是讓 Stage休眠,如果單純的 Stage.sleep()是沒有這個(gè)方法的。
2015-12-18
首先你要知道sleep這個(gè)方法是屬于哪個(gè)類的。從代碼上看很明顯是屬于Thread類的方法,而且他還是一個(gè)靜態(tài)方法,可以用類名直接調(diào)用的。
然后,再看你的Stage類,你是繼承了Thread類,說明父類Thread類的sleep方法子類也是可以調(diào)用的,當(dāng)你寫成this.sleep()和Thread.sleep()方法調(diào)用的其實(shí)是同一個(gè)sleep方法,也就是父類Thread里的sleep方法。
結(jié)論是,你用this.sleep()和Thread.sleep()作用是相同的。只不過你的Stage類沒有重寫父類的sleep方法,所以你不能使用Stage.sleep()這樣調(diào)用。