任務(wù)設(shè)計(jì)考試系統(tǒng)中的倒計(jì)時(shí)講課資料_第1頁
任務(wù)設(shè)計(jì)考試系統(tǒng)中的倒計(jì)時(shí)講課資料_第2頁
任務(wù)設(shè)計(jì)考試系統(tǒng)中的倒計(jì)時(shí)講課資料_第3頁
任務(wù)設(shè)計(jì)考試系統(tǒng)中的倒計(jì)時(shí)講課資料_第4頁
任務(wù)設(shè)計(jì)考試系統(tǒng)中的倒計(jì)時(shí)講課資料_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

任務(wù)11——設(shè)計(jì)考試系統(tǒng)中的倒計(jì)時(shí)學(xué)習(xí)情境二(考試系統(tǒng)單機(jī)版)學(xué)習(xí)目標(biāo)知識(shí)目標(biāo)能力目標(biāo)深入理解進(jìn)程與線程的概念。掌握線程創(chuàng)建的方法。理解線程狀態(tài)間的轉(zhuǎn)換、優(yōu)先級(jí)及其調(diào)度。了解線程的同步在實(shí)際中的應(yīng)用。

素質(zhì)目標(biāo)協(xié)調(diào)能力、團(tuán)隊(duì)合作的能力接受新知識(shí)、自主學(xué)習(xí)的能力

多線程技術(shù)的應(yīng)用

11.1任務(wù)描述本次任務(wù)是設(shè)計(jì)倒計(jì)時(shí)??荚囅到y(tǒng)中的倒計(jì)時(shí)功能是必不可少的功能之一,當(dāng)考生成功登錄考試系統(tǒng)后,點(diǎn)擊【開始考試】,則計(jì)時(shí)系統(tǒng)開始倒計(jì)時(shí)。當(dāng)考試時(shí)間結(jié)束時(shí),系統(tǒng)將彈出相應(yīng)的對(duì)話框提示并退出考試。如圖11-1,在我們所設(shè)計(jì)的考試系統(tǒng)中,時(shí)間的顯示在整個(gè)界面的上方,使得考生能清晰地看到時(shí)間的顯示,把握好考試時(shí)間。Java利用線程技術(shù)可以實(shí)現(xiàn)時(shí)間的動(dòng)態(tài)刷新和顯示,從而可以實(shí)現(xiàn)時(shí)間的同步顯示。11.2技術(shù)要點(diǎn)線程的創(chuàng)建線程的管理線程和進(jìn)程線程和進(jìn)程的主要差別體現(xiàn)在如下兩個(gè)方面:(1)同樣作為基本的執(zhí)行單元,線程的劃分比進(jìn)程小。(2)每個(gè)進(jìn)程都有一段專用的內(nèi)存區(qū)域。與此相反,線程卻共享內(nèi)存單元(包括代碼和數(shù)據(jù)),通過共享的內(nèi)存單元來實(shí)現(xiàn)數(shù)據(jù)交換、實(shí)時(shí)通信與必要的同步操作。

線程的創(chuàng)建Java中提供了兩種創(chuàng)建線程的方法擴(kuò)展Thread類實(shí)現(xiàn)Runnable接口來創(chuàng)建線程。

其中Thread類和Runnable接口都定義在包java.lang中。

擴(kuò)展Thread類創(chuàng)建線程創(chuàng)建和執(zhí)行線程步驟步驟一、創(chuàng)建一個(gè)Thread類的子類,該類必須重寫Thread類的run()方法。class類名稱extendsThread//從Thread類擴(kuò)展出子類{成員變量;成員方法;

publicvoidrun()//重寫Thread類的run()方法{線程處理的代碼…}}步驟二、創(chuàng)建該子類的對(duì)象,即創(chuàng)建一個(gè)新的線程。創(chuàng)建線程對(duì)象時(shí)會(huì)自動(dòng)調(diào)用Thread類定義的相關(guān)構(gòu)造函數(shù)。步驟三、用構(gòu)造函數(shù)創(chuàng)建新對(duì)象之后,這個(gè)對(duì)象中的有關(guān)數(shù)據(jù)被初始化,從而進(jìn)入線程的新建狀態(tài)。直到調(diào)用了該對(duì)象的strat()方法。步驟四、線程對(duì)象開始運(yùn)行,并自動(dòng)調(diào)用相應(yīng)的run()方法。

舉例ThreadDemo1.javaclassMyThreadextendsThread{publicvoidrun(){for(inti=1;i<=10;i++)System.out.println(this.getName()+":"+i);}}publicclassThreadDemo1{publicstaticvoidmain(String[]args){MyThreadt=newMyThread();t.start();}}舉例ThreadDemo2.javaclassMyThreadextendsThread{MyThread(Stringstr){ super(str);}publicvoidrun(){for(inti=1;i<=5;i++)System.out.println(this.getName()+":"+i);}}publicclassThreadDemo2{publicstaticvoidmain(String[]args){MyThreadt1=newMyThread("線程1");MyThreadt2=newMyThread("線程2");t1.start();t2.start();for(inti=1;i<=5;i++)System.out.println(Thread.currentThread().getName()+":"+i);}}實(shí)現(xiàn)Runnable接口創(chuàng)建線程Java提供了Runnable接口來完成創(chuàng)建線程的操作。在Runnable接口中,只包含一個(gè)抽象的run()方法。publicinterfaceRunnable{publicabstractvoidrun()}利用Runnable接口創(chuàng)建線程,首先定義一個(gè)實(shí)現(xiàn)Runnable接口的類,在該類中必須定義run()方法的實(shí)現(xiàn)代碼。classMyRunnableimplementsRunnable{…publicvoidrun(){//新建線程上執(zhí)行的的代碼}}實(shí)現(xiàn)Runnable接口創(chuàng)建線程直接創(chuàng)建實(shí)現(xiàn)了Runnable接口的類的對(duì)象并不能生成線程對(duì)象,必須還要定義一個(gè)Thread對(duì)象,通過使用Thread類的構(gòu)造函數(shù)去新建一個(gè)線程,并將實(shí)現(xiàn)Runnable接口的類的對(duì)象引用作為參數(shù)傳遞給為Thread類的構(gòu)造函數(shù),最后通過start()方法來啟動(dòng)新建線程?;静襟E如下:

MyRunnabler=newMyRunnable();Threadt=newThread(r);

r.start;舉例RunnerDemo.javaclassMyRunnerimplementsRunnable{publicvoidrun(){ Strings=Thread.currentThread().getName();for(inti=1;i<=10;i++)System.out.println(s+":"+i);}}publicclassRunnerDemo{publicstaticvoidmain(String[]args){MyRunnerr1=newMyRunner();Threadt1=newThread(r1,"線程1");Threadt2=newThread(r1,"線程2");t1.start();t2.start();for(inti=1;i<=10;i++)System.out.println("main主線程"+":"+i);}}線程的管理線程的狀態(tài)線程的優(yōu)先級(jí)線程的調(diào)度線程的同步線程的狀態(tài)線程在它的生命周期一般具有五種狀態(tài),即新建、就緒、運(yùn)行、堵塞、死亡。

線程的優(yōu)先級(jí)與Thread類的中和優(yōu)先級(jí)相關(guān)的三個(gè)靜態(tài)常量如下:低優(yōu)先級(jí):Thread.MIN_PRIORITY,取值為1。缺省優(yōu)先級(jí):Thread.NORM_PRIORITY,取值為5。高優(yōu)先級(jí):Thread.MAX_PRIORITY,取值為10。線程的調(diào)度線程的同步多個(gè)線程序需要共享同一資源,如果此時(shí)不去考慮線程之間的協(xié)調(diào)性,就可能造成運(yùn)行結(jié)果的錯(cuò)誤。

舉例ATMDemo1.javaclassATMDemo1{publicstaticvoidmain(String[]args){ BankAccountvisacard=newBankAccount();ATM丈夫=newATM("丈夫",visacard,200);ATM妻子=newATM("妻子",visacard,300);

Threadt1=newThread(丈夫); Threadt2=newThread(妻子);

System.out.println("當(dāng)前帳戶余額為:"+visacard.getmoney()); t1.start(); t2.start();}}classATMimplementsRunnable{//模擬ATM機(jī)或柜臺(tái)存錢

BankAccountcard;Stringname;longm;ATM(Stringn,BankAccountcard,longm){ =n;this.card=card; this.m=m;}舉例ATMDemo1.java(續(xù))publicvoidrun(){ card.save(name,m); //調(diào)用方法存錢

System.out.println(name+"存入"+m+"后,帳戶余額為"+card.getmoney());}}classBankAccount{ staticlongmoney=1000;//設(shè)置帳戶中的初始金額

publicvoidsave(Strings,longm){ //存錢

System.out.println(s+"存入"+m); longtmpe=money; //獲得當(dāng)前帳戶余額

try{//模擬存錢所花費(fèi)的時(shí)間

Thread.currentThread().sleep(10); }catch(InterruptedExceptione) {} money=tmpe+m; //相加之后存回帳戶

}publiclonggetmoney(){ //獲得當(dāng)前帳戶余額

returnmoney;}}11.3任務(wù)實(shí)施(模仿實(shí)踐)11.3任務(wù)實(shí)施(模仿實(shí)踐)例11-7TestClock.javaimportjava.text.NumberFormat;importjava.awt.event.*;importjavax.swing.*;publicclassTestClockimplementsActionListener{JFramejf;JButtonbegin;JButtonend;JButtonpause;JPanelp1;JLabelclock;ClockDispalymt;publicTestClock(){ jf=newJFrame("倒計(jì)時(shí)"); begin=newJButton("開始考試"); end=newJButton("結(jié)束考試"); pause=newJButton("暫停考試"); p1=newJPanel(); JLabelclock=newJLabel(); clock.setHorizontalAlignment(JLabel.CENTER); p1.add(begin); p1.add(pause); p1.add(end); jf.add(p1,"North"); jf.add(clock,"Center"); jf.setSize(340,180); jf.setLocation(500,300); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true);

mt=newClockDispaly(clock,100);//設(shè)置考試時(shí)間位為100分鐘

begin.addActionListener(this); pause.addActionListener(this); end.addActionListener(this);}publicstaticvoidmain(String[]args){ TestClocktest=newTestClock(); } publicvoidactionPerformed(ActionEvente){ Strings=e.getActionCommand(); if(s.equals("開始考試")){ begin.setEnabled(false); mt.start();//啟動(dòng)倒計(jì)時(shí)線程

} elseif(s.equals("暫??荚?)){ pause.setText("繼續(xù)考試"); mt.suspend(); } elseif(s.equals("繼續(xù)考試")){ pause.setText("暫??荚?); mt.resume(); }

elseif(s.equals("結(jié)束考試")){begin.setEnabled(false);pause.setEnabled(false);end.setEnabled(false);p1.setEnabled(false);mt.stop();System.exit(0); }} }classClockDispalyextendsThread{privateJLabellefttimer;privateJLabeltotaltimer;privateinttesttime; publicClockDispaly(JLabellt,inttime){

lefttimer=lt; testtime=time*60;}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論