run方法與start方法的區別
引言
上一節我們介紹了如何獲取和設置線程的名稱,本節將介紹run方法與start方法的區別,我們將從5個方面來具體說明它們的區別。
第一個方面是位置,也就是方法所處的位置。第二個方面是類型,也就是方法是否為同步方法。第三個方面是作用,主要是看他們各自的功能有什么不同。第四個方面是線程數量,主要是看方法在執行過程中是否會產生新的線程。第五個方面是調用次數,主要是看方法調用多次,是否會出現新的問題。
位置
首先我們來看第一個方面,位置。run方法和start的方法都位於thread的類里面。
不過 run方法是重寫runnable接口的,這一點它是和start方案有點區別。
類型
我們再來看第二個方面,第二個方面是類型,run方法是非同步方法,而star方法是同步方法,意味着多個線程同時執行start方法時不會存在線程安全問題。
作用
接下來我們再來看第三個方面,第三個方面是作用,run方法的作用是存放任務代碼的,例如任務,就是打印這段執行任務的現成的名稱,
而start的方法的作用是啟動線程,線程啟動以后它會自動去執行run方法,
例如創建線程以后調用它的start的方法啟動線程,線程啟動以后他就會去執行任務中的run方法。
線程數量
接下來我們來看第四個方面。 第四個方面是線程數量,也就是說我們在方法執行的過程中,是否會產生新的線程。
run方法在執行過程中不會產生新的線程,而start方法在執行過程中會產生一個新線程。
我們可以通過一個例子來驗證,自定義一個任務,任務的內容,就是打印當前正在執行任務的線程的名稱。首先我們獲取當前正在執行任務的線程,然后獲取該線程的名稱,最后打印該名稱
我們來執行這個任務,首先將任務創建出來,將任務傳遞給線程。
我們可以看到run方法的執行結果是main,說明執行過程中沒有新線程產生
原因就是我們現在代碼所處的線程就是主線程,也就是main,所以沒有產生新的線程。
我們再來看看start方法的執行結果,start方法的執行結果是thread-0.產生的一個新線程,
這個新的線程去執行了這個任務。通過驗證得知run方法它不會產生新線程,而star的方法它就會產生一個新的線程。
調用多次會不會出問題
接下來我們來看第五個方面,第五個方面是方法調用多次會不會出問題,run方法可以被調用,無數次都不會產生問題,而start方法雖然說它可以被調用無數次,但是它會出問題原因。在於線程只能被啟動一次,它不能重復啟動,唉我們來驗證一下。
接着我們剛剛的程序。我們再次調用start的方法來啟動這個線程,看看執行結果會怎樣,
果然是出來問題的,發生了異常,那么這個異常是線程狀態異常,一般我們重復啟動線程就會造成這個異常。
總結
最后我們來總結一下本節的內容,本節介紹了run方法與star方法的區別,位置方面他們都處於thread類中,只不過呢 run方法是重寫runnable接口的.
類型方面,run方法是非同步方法,而start方法是同步方法。
作用方面,run方法的作用是存放任務代碼,而start的方法呢是啟動線程線程數量方面,執行run方法它不會產生新線程,而執行start方法會產生新線程,
調用次數方面,run方法可以被執行無數次,而star方法只能被執行一次,原因就在於線程不能被重復啟動。
附錄:
筆記完整文本:
上一節我們介紹了如何獲取和設置線程的名稱,本節將介紹run方法與打擾方法的區別,我們將從5個方面來具體說明它們的區別。第一個方面是位置,也就是方法所處的位置。第二個方面是類型,也就是方法是否為同步方法。第三個方面是作用,主要是看他們各自的功能有什么不同。第四個方面是線程數量,主要是看方法在執行過程中是否會產生新的線程。第五個方面是調用廁所,主要是看方法調用多次,是否會出現新的問題。 首先我們來看第一個方面,位置,讓方法和star的方法都位於Siri的類里面。不過 run方法是重解字run到我接口的,這一點它是和start方案有點區別。我們再來看第二個方面,第二個方面是類型,run方法是非同步方法,而star方法是同步方法,意味着多個線程同時執行此二方法時不會存在建成安全問題。接下來我們再來看第三個方面,第三個方面是作用,讓方法的作用是存放任務代碼的,例如任務,就是打印這段執行任務的現成的名稱,而star的方法的作用是啟動線程,線程啟動以后它會自動去執行run方法,例如創建線程以后調用它的star的方法啟動線程,線程啟動以后他就會去執行任務中的run方法。接下來我們來看第四個方面。 第四個方面是線程數量,也就是說我們在方法執行的過程中,是否會產生新的線程,讓方法在執行過程中不會產生新的線程,而star方法在執行過程中會產生一個新線程,我們可以通過一個例子來驗證,制定一個任務任務的內容,就是打印當前正在執行任務的線程的名稱。首先我們獲取當前正在執行任務的線程,然后獲取該縣城的名稱,最后答應該、名稱,我們來執行這個任務,首先將任務創建出來,將任務傳遞給縣城。 我們可以看到run方法的執行結果是me,說明執行過程中沒有新線程產生,原因就是我們現在代碼所處的線程就是主線程,也就是問,所以沒有產生新的,線程。我們再來看看star方法的執行結果,star方法的執行結果是three的零產生的一個新線程,這個新的線程去執行了這個任務,通過驗證得知run方法它不會產生新線程,而star的方法它就會產生一個新的線程。接下來我們來看第五個方面,第五個方面是方法調用多次會不會出問題,讓方法可以被調用,無數次都不會產生問題,而star方法雖然說它可以被調用無數次,但是它會出問題原因在於線程只能被啟動一次,它不能重復啟動,唉我們來驗證一下。 接着我們剛剛的程序寫,我們再次調用12的方法來啟動這個線程,看看執行結果會怎樣,果然是出來問題的,發生了異常,那么這個異常是現成狀態異常,一般我們重復啟動線程就會造成這個異常。最后我們來總結一下本節的內容,本節介紹了run方法與star方法的區別,位置方面他們都處於斯瑞的淚中,只不過呢 run方法是重寫字runner接口的類型方面,run方法是非同步方法,而star方法是同步方法。 作用方面,讓方法的作用是存放任務代碼,而star的方法呢是啟動線程線程數量方面,執行run方法它不會產生新線程,而執行start方法會產生新線程,調用次數方面,run方法可以被執行無數次,而star方法只能被執行一次,原因就在於線程不能被重復啟動。