




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
任務(wù)三:飄動字幕動畫程序設(shè)計單元五:Java語言高級程序設(shè)計教學(xué)目標(biāo)知識目標(biāo)掌握線程的概念以及線程與進程的區(qū)別;理解線程的狀態(tài)和生命周期;掌握Thread類和Runnable接口的常用方法。能力目標(biāo)運用多線程的實現(xiàn)方法處理線程問題;能會繼承Thread類或?qū)崿F(xiàn)Runnable接口來完成多線程技術(shù)實現(xiàn)。教學(xué)內(nèi)容4任務(wù)陳述123知識準(zhǔn)備任務(wù)實施任務(wù)拓展任務(wù)實訓(xùn)5任務(wù)描述:
運用Java多線程技術(shù)編寫一個簡單的動畫,要求運行程序時窗口會顯示一個飄動的字幕,每隔1秒字幕會自動改變顯示的位置,先自左向右移動,到達窗口右邊界時,再改變?yōu)樽杂蚁蜃笠苿印_\行結(jié)果:1.任務(wù)陳述
計算機用來模擬和解決人們現(xiàn)實生活中問題,因此使用編程語言描述現(xiàn)實世界同樣需要串、并行共存。計算機中的并行處理即同時處理多個任務(wù),一般叫“多任務(wù)”。多任務(wù)處理方式的優(yōu)點是充分利用CPU資源,提高效率。含有多個CPU的計算機可將不同任務(wù)分配到不同CPU實現(xiàn)并行處理;單CPU則靠快速切換任務(wù)來模擬并行處理,使系統(tǒng)的空轉(zhuǎn)時間最少。2.知識準(zhǔn)備3.1線程與進程的概念和關(guān)系3.1.1線程與進程的概念程序(program)是為實現(xiàn)特定目標(biāo)或解決特定問題而用計算機語言編寫的命令序列的集合。進程(Process)是程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,對應(yīng)了從代碼加載、執(zhí)行至執(zhí)行完畢的一個完整過程,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。線程(Thread)是進程的一個實體,CPU調(diào)度和分派的基本單位,是比進程更小的能獨立運行的基本單位。2.知識準(zhǔn)備3.1.2線程與進程的關(guān)系一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。操作系統(tǒng)把資源分配給進程,而同一進程的所有線程共享該進程的所有資源。進程和線程的關(guān)系可以比喻成:當(dāng)打開Word(Office中的Word)程序,編寫工作計劃.doc文件---打開一個進程而當(dāng)執(zhí)行這個文件的打印工作---調(diào)用了Word中的一個線程線程是作為CPU調(diào)度和分配的基本單位,而進程是擁有資源的基本單位。2.知識準(zhǔn)備3.2線程的生命周期
一個線程都要經(jīng)歷一個從出現(xiàn)到死亡的過程,我們把這個過程稱之為生命周期。線程的生命周期包括4種狀態(tài):New(新生)、Runnable(可運行)、Blocked(被阻塞)和Dead(死亡)。2.知識準(zhǔn)備3.2.1新生狀態(tài)當(dāng)使用new操作符創(chuàng)建一個新的線程時,線程并不是馬上進行運行,此時線程處在新生(new)狀態(tài)。3.2.2可運行狀態(tài)當(dāng)處于新生狀態(tài)的線程調(diào)用了start方法后,線程就開啟了成為了可運行(Runnable)了。3.2.3被阻塞狀態(tài)當(dāng)線程在可運行狀態(tài)下執(zhí)行了睡眠(sleep)、阻塞I/O操作、等待(wait)等操作后,線程就進入了被阻塞狀態(tài),另一個線程就可以被調(diào)度運行了。3.2.4死亡狀態(tài)線程在可運行狀態(tài)下經(jīng)過一個正常的run方法結(jié)束完成自然死亡。再有就是可以使用stop方法來殺死一個線程,同時拋出一個ThreadDeath錯誤對象。2.知識準(zhǔn)備注意:Java規(guī)范中并沒有把運行單獨作為一個狀態(tài),因為即使調(diào)用了start方法,是否接著運行還要看CPU是否有空閑調(diào)用。3.3線程的創(chuàng)建3.3.1Thread類的簡介Thread類是Java提供用來的創(chuàng)建線程的核心類,存在于java.lang包中,它綜合了一個線程所需的屬性和方法,可以使用該類進行線程的創(chuàng)建、線程的常用操作以及設(shè)置線程優(yōu)先級等。
常用方法:
構(gòu)造方法:
publicThread():創(chuàng)建一個新的線程對象。
publicThread(Stringname):創(chuàng)建一個名字為name的新線程對象。
publicThread(Runnabletarget,Stringname):在現(xiàn)有的target對象基礎(chǔ)
上創(chuàng)建一個名字為name的線程對象,新的對象實際上是把target作為
了運行對象。2.知識準(zhǔn)備常用方法:
publicvoidstart():啟動線程。如果能獲得CPU的使用權(quán)就會自動執(zhí)行調(diào)用run()方法。
publicvoidrun():這是Thread線程類中最重要的方法,是線程執(zhí)行的起點,線程具體的操作都要編寫在此方法中。publicstaticvoidsleep(longmills):使正在運行的線程休眠mills好秒后再運行。publicfinalgetPriority():獲得線程的優(yōu)先級。publicfinalsetPriority(intpriority):設(shè)置線程的優(yōu)先級。publicfinalbooleanisAlive():判斷線程是否在活動,如果是返回true,否則返回false。2.知識準(zhǔn)備3.3.2Runnable接口Java不支持多繼承。一旦一個類繼承了Thread類,就不能再繼承其他的類。用戶若想讓其他類支持多線程,那么這個類還可以通過實現(xiàn)Runnable接口。Runnable接口位于java.lang包中,只提供了一個run()方法,該方法與Thread類中run()方法作用一樣,線程執(zhí)行的具體操作都要寫在此方法中。2.知識準(zhǔn)備3.3.3使用Thread類創(chuàng)建線程創(chuàng)建步驟:首先編寫的線程類需要繼承Thread類來實現(xiàn)多線程。其次設(shè)計Thread的子類,然后根據(jù)工作需要重新設(shè)計線程中的run方法(方法的重寫)。最后再使用start方法啟動線程,將執(zhí)行權(quán)轉(zhuǎn)交給run()方法。【例5-1】下面示例演示使用Thread類來創(chuàng)建線程并啟動線程,然后要求在線程中進行每隔1秒鐘打印一行數(shù)據(jù)。2.知識準(zhǔn)備【注意】這個程序的運行結(jié)果在不同機器上結(jié)果是不一樣的,到底什么時候使用線程1還是線程2是由操作系統(tǒng)的線程處理機制控制的。并且這個運行不會結(jié)束,只有強行關(guān)掉應(yīng)用程序線程才會關(guān)閉。因此注意在寫run()方法時一定要在里面加入結(jié)束判斷語句,可以是有限次的循環(huán),也可以是對某個界限的判斷。publicclassThreadExextendsThread{//繼承Thread類publicThreadEx(Stringname){//帶名字的構(gòu)造方法super(name);}//重寫run()方法,編寫代碼publicvoidrun(){System.out.println(this.getName()+”打印信息”);try{Thread.sleep(1000);//讓線程休眠1秒鐘,并拋出異常}catch(Exceptionex){ex.printStackTrace();}}publicclassMain{publicstaticvoidmain(Stringargs[]){//創(chuàng)建線程對象ThreadExthread1=newThreadEx(“線程1”);ThreadExthread2=newThreadEx(“線程2”);//啟動線程thread1.start();thread2.start();}}【例5-1】關(guān)鍵代碼上面的例子沒有辦法預(yù)測是哪個線程先運行是因為這兩個線程被CPU認(rèn)為是相同優(yōu)先級的線程。如要想使得線程之間可以有個預(yù)想的執(zhí)行順序那么可以通過setPriority(intpriority)方法來設(shè)置線程的優(yōu)先級,優(yōu)先級的改變是可以影響CPU調(diào)用線程的順序。優(yōu)先級是一個1-10的數(shù),默認(rèn)為5,Thread類中包含了3個靜態(tài)常量:publicstaticfinalintNORM_PRIORITY=5publicstaticfinalintMIN_PRIORITY=1publicstaticfinalintMAX_PRIORITY=10【例5-2】根據(jù)上例加入線程優(yōu)先級設(shè)置,要求線程1的優(yōu)先級最高,線程2的優(yōu)先級最低。2.知識準(zhǔn)備publicclassThreadExextendsThread{//繼承Thread類publicThreadEx(Stringname,intpriority){//帶名字的構(gòu)造方法super(name);this.setPriority(priority);}publicvoidrun(){//與上例一樣}publicclassMain{publicstaticvoidmain(Stringargs[]){//創(chuàng)建線程對象,并設(shè)置優(yōu)先級ThreadExthread1=newThreadEx(“線程1”,Thread.MAX_PRIORITY);ThreadExthread2=newThreadEx(“線程2”,Thread.MIN_PRIORITY);//啟動線程thread1.start();thread2.start();}}【例5-2】關(guān)鍵代碼3.3.4使用Runnable接口創(chuàng)建線程創(chuàng)建步驟:首先線程類需要實現(xiàn)Runnable接口;其次實現(xiàn)接口中的run()方法;然后創(chuàng)建一個線程對象,并將對象作為參數(shù)傳遞給Thread類的構(gòu)造方法,從而生成一個Thread類;最后調(diào)用start()方法啟動線程。【例5-3】下面示例演示使用Runnable接口來創(chuàng)建線程并啟動線程,然后要求在線程中進行沒隔1秒鐘打印一行數(shù)據(jù)。2.知識準(zhǔn)備publicvoidrun(){System.out.println(name+”打印信息”);try{Thread.sleep(1000);//讓線程休眠1秒鐘,并拋出異常}catch(Exceptionex){ex.printStackTrace();}}publicstaticvoidmain(Stringargs[]){//創(chuàng)建線程目標(biāo)對象RunnableExre1=newRunnableEx(“線程1”);RunnableExre2=newRunnableEx(“線程2”);//創(chuàng)建線程對象Threadt1=newThread(re1);Threadt2=newThread(re2);//啟動線程t1.start();t2.start();}【例5-3】關(guān)鍵代碼實施思路在窗口中,通過JLabel顯示一行文字,通過啟動一個線程,在線程中每隔一秒改變一次JLabel對象的位置可實現(xiàn)字幕飄動的動畫效果;創(chuàng)建一個主類MovingText繼承JFrame實現(xiàn)Runnable接口;主類MovingText構(gòu)造方法中創(chuàng)建JLabel對象,創(chuàng)建線程對象并啟動線程;實現(xiàn)Runnable的run方法,用sleep方法休眠一秒,修改JLabel對象位置;在main方法中實例化MovingText。3.任務(wù)實施程序代碼publicvoidrun(){
try{
Threadt=Thread.currentThread(); System.out.println("當(dāng)前線程是:"+t); while(true){
Thread.sleep(1000);//睡眠一秒鐘
m_label.setBounds(10+i*10,100,150,50);//設(shè)置飄動標(biāo)志 if(i>20) bRight=false; if(i<0) bRight=true; if(bRight) i++; else i--; } }catch(Exceptione){ }3.任務(wù)實施一、實現(xiàn)Runnable接口比繼承Thread類所具有的優(yōu)勢1.適合多個相同的程序代碼的線程去處理同一個資源;2.可以避免java中的單繼承的限制;3.增加程序的健壯性,代碼可以被多個線程共享,代碼和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國土壤污染修復(fù)項目創(chuàng)業(yè)計劃書
- 中國家校互動系統(tǒng)項目創(chuàng)業(yè)計劃書
- 中國肉禽魚類制品項目創(chuàng)業(yè)計劃書
- 中國開封項目創(chuàng)業(yè)計劃書
- 中國精準(zhǔn)農(nóng)業(yè)軟件項目創(chuàng)業(yè)計劃書
- 中國計算機通信及數(shù)據(jù)傳輸項目創(chuàng)業(yè)計劃書
- 中國檸檬種植項目創(chuàng)業(yè)計劃書
- 中國高速光纖傳感器項目創(chuàng)業(yè)計劃書
- 中國釣魚項目創(chuàng)業(yè)計劃書
- 內(nèi)蒙古飼料項目創(chuàng)業(yè)計劃書
- 2025年遼寧省高考生物試卷(含答案)
- 2025年全國統(tǒng)一高考數(shù)學(xué)試題全國二卷
- 門窗安裝考試題及答案
- 2025佛山市順德區(qū)輔警考試試卷真題
- 旅游度假區(qū)運營管理方案
- 2025屆高三語文最后一課
- 中國數(shù)據(jù)中心產(chǎn)業(yè)發(fā)展白皮書023年
- 創(chuàng)新創(chuàng)業(yè)創(chuàng)造:職場競爭力密鑰智慧樹知到期末考試答案章節(jié)答案2024年上海對外經(jīng)貿(mào)大學(xué)
- 醫(yī)院檢驗科實驗室生物安全程序文件SOP
- 中外古典園林史-南京林業(yè)大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 有關(guān)建立《涉農(nóng)貸款專項統(tǒng)計制度》的通知(doc 72頁)
評論
0/150
提交評論