多線程學習之一

1. 多線程

概念

進程:是一個正在執行中的程序,每一個進程執行都有一個執行順序,該順序是一個執行路   徑,或叫一個控制單元。

線程:就是進程中的一個獨立的控制單元。是一個程序裏邊不同的執行路徑。

線程在控制着進程的執行。

一個進程中至少有一個線程。

java虛擬機:JVM啓動時,會有一個進程java.exe,該進程中至少一個線程,複製java程序的執行,而且這個線程運行的代碼存在main方法中,該線程稱爲主線程

JVM虛擬機啓動時不止一個線程的:主線程、垃圾回收線程等。。。

爲什麼覆蓋run()方法?

Thread類中的run方法,用於存儲線程要運行的代碼。將自定義代碼存儲在run方法中。

start方法:啓動線程並執行該線程的run方法。

run()start()方法區分:

run():僅相當於方法調用,並未啓動該方法所在線程,也無法達到多線程的目的。

start():開啓線程並調用該線程的run方法。

創建線程的方式:

方法一、繼承Thread

子類覆蓋父類的run方法,並將線程運行的代碼存入run方法中--建立子類的對象時,同時線程也被創建--調用start方法啓動線程

1)線程狀態-5

被創建--start-->運行 <-- sleep(time) / wait(),notify() -->凍結 沒有執行資格  -- stop() / run()方法結束  消亡

臨時阻塞狀態 -- 線程start以後不一定會立刻運行,具備運行資格,但沒有執行權。

2)線程默認名稱

Thread-編號  該編號從0開始

方法二、實現Runnable接口

覆蓋run方法,通過Thread類建立線程對象,將Runnable接口子類的對象作爲實際參數傳給Thread類的構造方法 - Thread(Runnable target) ,調用Thread類的start方法開啓線程。

實現方式和繼承方式有什麼區別?

繼承Thread:線程代碼存放在Thread子類run方法中。

實現Runnable:線程代碼存在接口的子類的run方法中。避免了單繼承的侷限性。

*接口的run方法沒有拋異常,所以 Thread.sleep(10);只能用try-catch捕獲異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章