版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣西幼兒師范高等??茖W(xué)校單招職業(yè)技能考試題庫必考題
- 2026年建筑結(jié)構(gòu)設(shè)計(jì)師等級(jí)考試題庫
- 2026年工程造價(jià)師技能水平認(rèn)定操作考核樣題
- 2026年農(nóng)業(yè)新技術(shù)推廣與效益分析模擬題
- 2025年教師資格證《教育知識(shí)與能力》真題庫
- 2026年傳統(tǒng)文化知識(shí)與現(xiàn)代應(yīng)用題庫
- 2026年旅游景點(diǎn)與文化背景單選題庫
- 2026年金融投資入門股票基礎(chǔ)知識(shí)考試題集及解析
- 2026年舞蹈教師資格認(rèn)證題庫之舞蹈教學(xué)技巧
- 2026年高級(jí)財(cái)務(wù)管理知識(shí)題庫財(cái)務(wù)決策與控制技能測(cè)試
- 2025至2030中國手術(shù)機(jī)器人醫(yī)生培訓(xùn)體系構(gòu)建與手術(shù)收費(fèi)模式研究報(bào)告
- 動(dòng)環(huán)監(jiān)控系統(tǒng)FSU安裝調(diào)試操作指南
- 學(xué)校名稱更名申請(qǐng)書
- 中醫(yī)養(yǎng)生知識(shí)課件
- 2025伊金霍洛旗九泰熱力有限責(zé)任公司招聘專業(yè)技術(shù)人員50人公筆試備考試題附答案
- 2025-2026年人教版八年級(jí)上冊(cè)歷史期末考試卷及答案
- 港口碼頭建設(shè)施工方案
- 2025年蘭州新區(qū)幼兒園筆試題及答案
- 總部經(jīng)濟(jì)返稅合同范本
- 環(huán)境監(jiān)測(cè)站建設(shè)施工方案
- 快遞配送外包合同范本
評(píng)論
0/150
提交評(píng)論