5.run方法和start方法的區別


 

 

 

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方法只能被執行一次,原因就在於線程不能被重復啟動。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM