關于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創(chuàng)建線程 Thread?armyOfSuiDynasty=new?Thread(armyTaskOfSuiDynasty,"隋朝軍隊"); Thread?armyOfFarmer=new?Thread(armyTaskOfFarmer,"農(nóng)民軍隊"); //線程的運行 armyOfSuiDynasty.start(); armyOfFarmer.start(); //讓舞臺線程休眠,大家能夠專心觀看軍隊的廝殺 try?{ Thread.sleep(50); }?catch?(InterruptedException?e)?{ e.printStackTrace();} System.out.println("正當雙方激戰(zhàn)正酣,半路殺出了個程咬金"); Thread?Chengyaojin=new?KeypersonThread(); Chengyaojin.setName("程咬金"); System.out.println("程咬金的理想就是結束戰(zhàn)斗,使得百姓安居樂業(yè)"); //軍隊停止戰(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("程咬金完成了自己的理想,結束了戰(zhàn)斗,使得人民能夠安居樂業(yè)"); 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類的方法,而且他還是一個靜態(tài)方法,可以用類名直接調(diào)用的。
然后,再看你的Stage類,你是繼承了Thread類,說明父類Thread類的sleep方法子類也是可以調(diào)用的,當你寫成this.sleep()和Thread.sleep()方法調(diào)用的其實是同一個sleep方法,也就是父類Thread里的sleep方法。
結論是,你用this.sleep()和Thread.sleep()作用是相同的。只不過你的Stage類沒有重寫父類的sleep方法,所以你不能使用Stage.sleep()這樣調(diào)用。