注解多線程授課章_第1頁
注解多線程授課章_第2頁
注解多線程授課章_第3頁
注解多線程授課章_第4頁
注解多線程授課章_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四章注解和多線程第一單元第1頁/共33頁本章相關(guān)學(xué)習(xí)資源《注解》專題《多線程處理》專題《使用Java高級(jí)實(shí)用技術(shù)》第4章《注解和多線程》學(xué)習(xí)平臺(tái)“Java高級(jí)特性”課程學(xué)生用書第2頁/共33頁預(yù)習(xí)檢查注解有哪幾類?讀取注解信息使用哪個(gè)接口?線程的生命周期包括哪幾個(gè)狀態(tài)?線程同步的方式有哪兩個(gè)?關(guān)鍵字是什么?提問第3頁/共33頁本章任務(wù)使用注解描述程序代碼使用多線程輸出1~100的整數(shù)使用線程同步實(shí)現(xiàn)銀行取款通過線程間通信解決生產(chǎn)消費(fèi)者問題第4頁/共33頁會(huì)使用內(nèi)建注解和自定義注解會(huì)讀取注解信息實(shí)現(xiàn)線程同步實(shí)現(xiàn)線程調(diào)度本章目標(biāo)創(chuàng)建和啟動(dòng)線程點(diǎn)重理解注解和線程的概念點(diǎn)難實(shí)現(xiàn)線程通信點(diǎn)難點(diǎn)難第5頁/共33頁點(diǎn)重講解:注解AnnotationinJDK5.0---將元數(shù)據(jù)引入Java元數(shù)據(jù):描述數(shù)據(jù)的數(shù)據(jù)元數(shù)據(jù)的用處:文檔編制、編譯器檢查、代碼分析等元數(shù)據(jù)Java注解:Java代碼里的特殊標(biāo)記。它為在代碼中添加用Java程序無法表達(dá)的額外信息提供了一種形式化的方法。注釋不會(huì)被程序所讀取注解可以在編譯、類加載、運(yùn)行時(shí)被讀取注釋注解第6頁/共33頁串講:注解的分類內(nèi)建注解元注解自定義注解三類注解標(biāo)準(zhǔn)注解類型,如:@Override、@SuppressWarnings修飾其他的注解定義,如:@Target、@Retention注解類型是一種接口使用關(guān)鍵字@interface定義第7頁/共33頁串講:內(nèi)建注解標(biāo)準(zhǔn)注解類型(位于java.lang包下)限定重寫父類方法:@Override標(biāo)示已過時(shí):@Deprecated抑制編譯器警告:@SuppressWarnings@DeprecatedpublicvoidgetObjectInfo(){System.out.println("蘋果重寫水果的getObjectInfo方法");}publicclassFruit{publicvoidgetObjectInfo(){…}}publicclassAppleextendsFruit{@OverridepublicvoidgetObjectInfo(){…}}使用@Override指定下面的方法是重寫父類方法第8頁/共33頁使用@Deprecated指定下面的方法已過時(shí)串講:內(nèi)建注解標(biāo)準(zhǔn)注解類型抑制編譯器警告:@SuppressWarnings帶一個(gè)參數(shù):@注解名(value="值")帶多個(gè)參數(shù):@注解名(value="值","值",…)@SuppressWarnings可以修飾類、方法、語句@SuppressWarnings(value="unchecked");publicclassFruit{……}使用@SuppressWarnings抑制編譯器警告信息參數(shù)“unchecked”表示:執(zhí)行了未檢查的轉(zhuǎn)換第9頁/共33頁上機(jī)練習(xí)需求說明定義Person類,包含姓名屬性(name)和打招呼的方法(sayHi())。其中name屬性標(biāo)識(shí)為已過時(shí)定義學(xué)生類(Student)繼承Person類,使用注解限定重寫sayHi()方法在main()方法中實(shí)例化兩個(gè)學(xué)生對(duì)象,并使用注解抑制對(duì)象未使用的編譯器警告信息完成時(shí)間:10分鐘共性問題集中講解練習(xí)第10頁/共33頁串講:元注解四個(gè)元注解類型@Target指定被其修飾的注解能用于修飾哪些程序元素成員變量value為ElementType枚舉類型@Retention指定該注解可使用反射讀取成員變量value:RetentionPolicy枚舉類型@Documented指定被其修飾的注解將被JavaDoc工具提取成文檔@Inherited指定被其修飾的注解將具有繼承性第11頁/共33頁串講:自定義注解自定義注解使用@interface關(guān)鍵字聲明注解也可以帶成員變量public@interfaceAnnotationTest1{}public@interfaceAnnotationTest2{StringtypeCon();}注解中以無參數(shù)方法的形式來聲明成員變量public@interfaceDataBaseType3{ StringtypeConn()default"SQL";}使用default關(guān)鍵字為注解類型的成員變量指定初始值@Target(METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceDataBaseType3{ StringtypeConn()default"SQL";}使用元數(shù)據(jù)注解@Target來指定該注解僅作用于方法使用元數(shù)據(jù)注解@Retention來指定該注解可使用反射讀取第12頁/共33頁串講:使用自定義注解使用注解默認(rèn)情況下,注解可用于修飾任何程序元素,如類、接口、方法和成員變量等規(guī)范注解單獨(dú)放在一行注解放在所有修飾符之前@AnnotationTest1publicclassMyAnnotation{...}@AnnotationTest2publicclassMyAnnotation{...}@AnnotationTest2(type=“oracle”)publicclassMyAnnotation{...}@AnnotationTest3publicclassMyAnnotation{...}使用默認(rèn)值注解修飾類第13頁/共33頁串講:讀取注解信息java.lang.reflect.AnnotatedElement接口指定了程序中可以接受注解的程序元素讀取注解信息的方法getAnnotation(Class<T>annotationClass)返回該程序元素上存在的、指定類型的注解,如果該類型的注解不存在,則返回nullAnnotation[]getAnnotations()返回該程序元素上存在的所有注解@Retention注解的value成員變量的值設(shè)為RetentionPolicy.RUNTIME演示示例:自定義注解和讀取注解信息第14頁/共33頁上機(jī)練習(xí)需求說明自定義注解,只能修飾方法,包含一個(gè)成員變量age,有默認(rèn)值20定義Person類,包含驗(yàn)證年齡的方法,使用自定義注解修飾,在此方法中讀取注解中的年齡信息并進(jìn)行判斷,如果年齡在18歲以下,提示“未成年”,否則,提示“具備選舉權(quán)”定義測試類完成時(shí)間:10分鐘共性問題集中講解練習(xí)第15頁/共33頁小結(jié)內(nèi)建注解包含哪幾個(gè)?作用分別是什么?自定義注解的語法是什么?讀取注解信息使用的接口和方法是什么?提問第16頁/共33頁講解:進(jìn)程與線程系統(tǒng)運(yùn)行程序的基本單位有獨(dú)立的內(nèi)存空間和系統(tǒng)資源進(jìn)程進(jìn)程中執(zhí)行運(yùn)算的最小單位處理機(jī)分配給線程,即真正在處理機(jī)上運(yùn)行的是線程線程第17頁/共33頁串講:線程的創(chuàng)建和啟動(dòng)在Java中創(chuàng)建線程的兩種方式繼承java.lang.Thread類實(shí)現(xiàn)java.lang.Runnable接口使用線程的步驟1.定義線程2.創(chuàng)建線程對(duì)象3.啟動(dòng)線程4.終止線程第18頁/共33頁上機(jī)練習(xí)需求說明創(chuàng)建線程,輸出1~100之間的偶數(shù)。要求使用兩種方式創(chuàng)建線程分析繼承java.lang.Thread類實(shí)現(xiàn)java.lang.Runnable接口完成時(shí)間:15分鐘共性問題集中講解練習(xí)第19頁/共33頁講解:線程的狀態(tài)線程的生命周期包括四個(gè)狀態(tài):新生狀態(tài)、可運(yùn)行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)第20頁/共33頁講解:線程調(diào)度多個(gè)線程處于可運(yùn)行狀態(tài)分配優(yōu)先級(jí):反映線程的重要或緊急程度線程的優(yōu)先級(jí)用1~10表示,1的優(yōu)先級(jí)最高,默認(rèn)值是5更改優(yōu)先級(jí)setPriority(intgrade)方法myThread.setPriority(3);線程調(diào)度的方法join()方法sleep()方法yield()方法第21頁/共33頁講解:線程調(diào)度—join()方法使用join()方法調(diào)度線程publicfinalvoidjoin();publicfinalvoidjoin(longmills);publicfinalvoidjoin(longmills,intnanos);語法阻塞指定的線程等到另一個(gè)線程完成以后再繼續(xù)執(zhí)行演示示例:使用join()方法調(diào)度線程第22頁/共33頁講解:線程調(diào)度—sleep()方法使用sleep()方法調(diào)度線程publicstaticvoidsleep(long

millis);當(dāng)前線程在指定毫秒內(nèi)停止執(zhí)行而轉(zhuǎn)入不可運(yùn)行狀態(tài)publicvoidrun(){for(inti=0;i<5;i++){ ……}try{

Thread.sleep(10000);//等待10秒}catch(InterruptedExceptione){e.printStackTrace();}}演示示例:使用sleep()方法調(diào)度線程第23頁/共33頁講解:線程調(diào)度—yield()方法使用yield()方法調(diào)度線程publicstaticvoidyield();當(dāng)前線程轉(zhuǎn)入暫時(shí)停止運(yùn)行的狀態(tài)sleep()與yield()的區(qū)別sleep()yield()使當(dāng)前線程進(jìn)入被阻塞的狀態(tài)將當(dāng)前線程轉(zhuǎn)入暫停執(zhí)行的狀態(tài)即使沒有其他等待運(yùn)行的線程,當(dāng)前線程也會(huì)等待指定的時(shí)間如果沒有其他等待執(zhí)行的線程,當(dāng)前線程會(huì)馬上恢復(fù)執(zhí)行其他等待執(zhí)行的線程的機(jī)會(huì)是均等的會(huì)將優(yōu)先級(jí)相同或更高的線程運(yùn)行演示示例:使用yield()方法調(diào)度線程第24頁/共33頁上機(jī)練習(xí)需求說明定義一個(gè)線程A,輸出1~10之間的整數(shù),定義一個(gè)線程B,逆序輸出1~10之間的整數(shù),要求線程A和線程B交替輸出分析使用sleep()方法阻塞當(dāng)前線程完成時(shí)間:10分鐘共性問題集中講解練習(xí)第25頁/共33頁串講:線程同步線程同步當(dāng)兩個(gè)或多個(gè)線程需要訪問同一資源時(shí),需要以某種順序來確保該資源某一時(shí)刻只能被一個(gè)線程使用1同步方法(synchronized)2同步代碼塊(synchronized)如何實(shí)現(xiàn)線程同步?提問演示示例:實(shí)現(xiàn)線程同步第26頁/共33頁上機(jī)練習(xí)需求說明張三和妻子各擁有一張銀行卡和存折,可以對(duì)同一個(gè)銀行賬戶進(jìn)行存取款的操作,請(qǐng)使用多線程及同步方法模擬張三和妻子同時(shí)取款的過程。要求使用同步方法和同步代碼塊兩種方式實(shí)現(xiàn)分析定義Account類表示銀行帳戶定義兩個(gè)線程分別實(shí)現(xiàn)張三和妻子取款的操作完成時(shí)間:15分鐘共性問題集中講解練習(xí)第27頁/共33頁串講:線程通信方法Java實(shí)現(xiàn)線程通信的方法wait()方法掛起當(dāng)前線程,并釋放共享資源的鎖notify()方法在因調(diào)用該對(duì)象的wait()方法而阻塞的線程中隨機(jī)選擇一個(gè)解除阻塞,但要等到獲得鎖后才可真正執(zhí)行notifyAll()方法將因調(diào)用該對(duì)象的wait()方法而阻塞的所有線程一次性全部解除阻塞這三個(gè)方法只能在同步方法或者同步代碼塊中使用演示示例:實(shí)現(xiàn)線程通信第28頁/共33頁上機(jī)練習(xí)需求說明使用線程通信解決生產(chǎn)消費(fèi)者問題分析定義共享資源類定義生產(chǎn)者線程類定義消費(fèi)者線程類完成時(shí)間:20分鐘共性問題集中講解練習(xí)第29頁/共33頁答疑時(shí)間同學(xué)們請(qǐng)就以下方面的問題請(qǐng)教老師(教員備課時(shí)自行填寫)第30頁/共33頁總結(jié)簡述三個(gè)內(nèi)建注解的作用。定義注解的成員變量的

溫馨提示

  • 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)論