1. 多線程
u 概念
進程:是一個正在執行中的程序,每一個進程執行都有一個執行順序,該順序是一個執行路 徑,或叫一個控制單元。
線程:就是進程中的一個獨立的控制單元。是一個程序裏邊不同的執行路徑。
線程在控制着進程的執行。
一個進程中至少有一個線程。
java虛擬機:JVM啓動時,會有一個進程java.exe,該進程中至少一個線程,複製java程序的執行,而且這個線程運行的代碼存在main方法中,該線程稱爲主線程。
JVM虛擬機啓動時不止一個線程的:主線程、垃圾回收線程等。。。
u 爲什麼覆蓋run()方法?
Thread類中的run方法,用於存儲線程要運行的代碼。將自定義代碼存儲在run方法中。
start方法:啓動線程並執行該線程的run方法。
u run()和start()方法區分:
run():僅相當於方法調用,並未啓動該方法所在線程,也無法達到多線程的目的。
start():開啓線程並調用該線程的run方法。
u 創建線程的方式:
v 方法一、繼承Thread類
子類覆蓋父類的run方法,並將線程運行的代碼存入run方法中--建立子類的對象時,同時線程也被創建--調用start方法啓動線程
1)線程狀態-5種
被創建--start-->運行 <-- sleep(time) / wait(),notify() -->凍結 沒有執行資格 -- stop() / run()方法結束 消亡
臨時阻塞狀態 -- 線程start以後不一定會立刻運行,具備運行資格,但沒有執行權。
2)線程默認名稱
Thread-編號 該編號從0開始
v 方法二、實現Runnable接口
覆蓋run方法,通過Thread類建立線程對象,將Runnable接口子類的對象作爲實際參數傳給Thread類的構造方法 - Thread(Runnable target) ,調用Thread類的start方法開啓線程。
v 實現方式和繼承方式有什麼區別?
繼承Thread:線程代碼存放在Thread子類run方法中。
實現Runnable:線程代碼存在接口的子類的run方法中。避免了單繼承的侷限性。
*接口的run方法沒有拋異常,所以 Thread.sleep(10);只能用try-catch捕獲異常。