1.反射
1.1 反射是什么掺冠?
??????? 反射機制是Java程序沉馆,在運行中,動態(tài)獲取類的信息(方法德崭、屬性斥黑、注解等)、并且還可以調用類的屬性眉厨、和方法心赶。這種動態(tài)獲取類的信息、以及動態(tài)調用對象的方法和屬性的行為就叫反射缺猛。?>>>反射:就是可以獲取類的信息缨叫、和執(zhí)行方法。
1.2 反射可以做什么
??????? 1.運行時獲取類中的屬性
??????? 2.運行時獲取類中的方法
??????? 3.運行時創(chuàng)建類的對象?
??????? 4.運行時荔燎,執(zhí)行類中的方法
??????? 5.運行時耻姥,校驗屬性是否屬于某個類
??????? 6.實現(xiàn)動態(tài)代理
1.3 反射怎么用
??????? 通過反射實現(xiàn),類中的屬性有咨、方法的獲取琐簇。還可以運行類中的方法。
??????? 創(chuàng)建Class對象的幾種方式: > 1.類名.class > > 2.Class.forName > > 3.對象名.getClass
代碼演示:獲取類中的屬性
代碼演示:獲取類中的方法
代碼演示:通過反射執(zhí)行類中的方法
2.進程和線程
2.1 進程
??????? > 進程:軟件在運行時一種狀態(tài)座享。會占用CPU婉商、內存等號資源 > > 正在運行的程序 >
??????? 進程的特點: > > 1.獨立性 > > 2.動態(tài)性 > > 3.并發(fā)性
2.2 線程
??????????> 線程:代碼的執(zhí)行路徑,是進程的組成部分渣叛,一個進程可以有多個線程丈秩。每個線程都可以執(zhí)行自己的內容或者多個線程共同執(zhí)行一個任務 > > 有了多線程,就可以同時干多件事情 > 線程是CPU的最小調度單位淳衙,CPU可以很快的在多個線程間實現(xiàn)切換蘑秽。 > > 運行時的線程饺著,隨時都可以被CPU給掛起。 > > 線程的搶占發(fā)生在任意時期肠牲。
2.3 進程和線程的區(qū)別
??????? 1幼衰、一個程序,可以有多個進程?
??????? 2缀雳、一個進程可以有多個線程渡嚣。但是必須要有一個主線程
??????? 3、進程間不能共享資源肥印,但是線程間可以共享資源严拒。
2.4 線程的體驗和創(chuàng)建方式
??????? ?敲黑板:java中的main方法其實就是主線程,main內部的代碼執(zhí)行都是主線程在執(zhí)行竖独。 我們自己手動創(chuàng)建線程裤唠,都叫子線程
2.5 線程的說明
??????? 1.Java中的線程類:Thread
??????? 2.Java中的線程都需要接口,線程接口:Runnable ? 接口內部只有一個方法:run ? public void run()莹痢;
??????? 3.每次在寫子線程的時候种蘸,都需要在run方法內部實現(xiàn)自己要干的事情
??????? 4.啟動線程是用的start方法
2.6 線程的創(chuàng)建方式
??????? 日常使用線程,常用的三種創(chuàng)建方式竞膳。
??????????????? 1.實現(xiàn)Runnable接口
??????????????? 2.自定義類實現(xiàn)Thread類的子類航瞭,重寫run方法
??????????????? 3.實現(xiàn)Callable接口
2.6.1 實現(xiàn)Runnable接口實現(xiàn)線程
??????? 1.采用匿名內部類 直接完成接口的實例化,并重寫run方法
??????? 2.自定義類實現(xiàn)接口坦辟,重寫run方法
代碼演示:基于Runnable接口實現(xiàn)線程:
代碼演示:采用匿名內部類 直接完成接口的實例化
代碼演示:繼承Thread類實現(xiàn)線程刊侯。創(chuàng)建類繼承Thread,并重寫run方法
代碼演示:使用Callable實現(xiàn)線程
??????? jdk新版本推出線程創(chuàng)建方式,線程可以帶返回值锉走。
?????????? ?1.實現(xiàn)Callable接口滨彻,并指定線程的返回值類型
??????????? 2.創(chuàng)建FutureTask對象
??????????? 3.創(chuàng)新線程對象,并傳遞任務對象
??????????? 4.啟動線程
??????????? 5.獲取線程的返回值
2.6.2 總結:三種創(chuàng)建方式的區(qū)別
> 繼承Thread類: > > ? 編寫簡單挪蹭、單繼承亭饵,所以這種類無法再繼承其他類、無法實現(xiàn)多個線程的資源共享梁厉、擴展性無
> 實現(xiàn)Runnable接口: > > ? 編寫復雜一點辜羊,接口可以多實現(xiàn),可以實現(xiàn)多個線程的資源共享 推薦使用 >
實現(xiàn)Callable接口: > > 編碼復雜词顾,可以實現(xiàn)線程執(zhí)行完之后進行值的返回 > 開發(fā)中八秃,需要線程返回值,就使用Callable肉盹,不需要返回值的就可以Runnable5.8
2.7 線程狀態(tài)
2.7.1 線程的狀態(tài)(生命周期)
簡圖:
2.8 線程的分類
2.8.1 線程分為:用戶線程和守護線程昔驱。Java中默認創(chuàng)建的線程就是用戶線程。
代碼演示:用戶線程和守護線程
2.8.2 用戶線程和守護線程的區(qū)別
代碼演示?:
當用戶線程銷毀的時候垮媒,會將自己的守護線程一起銷毀舍悯!
2.9 線程的優(yōu)先級
??????? 線程的優(yōu)先級就是線程獲得CPU的概率航棱,優(yōu)先級越高睡雇,獲取CPU的概率越大 從小到大萌衬,1-10之間。10是優(yōu)先級最高它抱,默認的優(yōu)先級是5秕豫。
2.9.1 設置優(yōu)先級
?????? 通過線程的setPriority 設置線程的優(yōu)先級。
???????通過線程的getPriority獲取線程的優(yōu)先級观蓄。?
???????設置優(yōu)先級需要在start之前設置混移。
3.0 Lambda表達式
??????? Lambda是JDK8之后支持的一種簡寫模式∥甏可以快速的實現(xiàn)接口的實例化歌径。
??????? 語法格式:(參數(shù))->{方法重寫}
??????? 規(guī)則: ? 1.接口 ? 2.接口中只能有一個抽象方法 ? 3.Lambda表達式的結果是一個對象
代碼演示: