天天看點

一、線程的建立方式:●繼承Thread類,重寫run()方法,建立新的Thread對象,調用start()方法啟動線程。

作者:Java一點通

一、線程的建立方式:

● 繼承Thread類,重寫run()方法,建立新的Thread對象,調用start()方法啟動線程。

● 實作Runnable接口,重寫run()方法,将Runnable對象作為參數傳遞給新的Thread對象,調用start()方法啟動線程。

● 實作Callable接口,重寫call()方法,建立FutureTask對象,将FutureTask對象作為參數傳遞給新的Thread對象,調用start()方法啟動線程。

● 使用線程池來管理線程,通過Executor架構提供的方法來建立線程。

● 使用Lambda表達式來建立線程,可以通過Runnable或Callable接口建立線程。

二、線程生命周期:

● 建立狀态(New):線程對象被建立,但尚未啟動。此時線程并不占用任何系統資源。

● 就緒狀态(Runnable):線程已經被建立并啟動,等待CPU配置設定時間片開始執行。此時,線程處于記憶體中,且能夠擷取其所需的所有資源。

● 運作狀态(Running):線程擁有CPU的執行時間片,線程開始執行自己的任務。此時,線程正在運作其代碼,并持續消耗系統資源。

● 阻塞狀态(Blocked):線程由于某些原因暫停自己的執行,等待一些條件的發生(例如等待I/O完成、等待鎖等)。此時,線程雖然存在,但不再消耗資源。

● 終止狀态(Terminated):線程執行完了它的任務或任務被強制終止,此時該線程已經結束。在Java中,線程結束後會自動回收記憶體和系統資源。

三、線程之間狀态的轉換:

● 就緒-->運作:當線程獲得CPU資源時,從就緒狀态轉換為運作狀态。

● 運作-->阻塞:在運作狀态下,某些情況使線程進入阻塞狀态。

● 阻塞-->就緒:當線程阻塞結束時,重新進入就緒狀态。

● 運作-->等待:執行wait()、sleep()、join()等方法,使線程進入等待狀态。

● 等待-->就緒:當線程被notify()、notifyAll()或逾時後,會重新進入就緒狀态。

● 運作-->終止:當線程執行完run()方法或發生異常,使線程進入終止狀态。

四、線程的基本方法包括:

● start()方法:啟動一個新線程。調用start()方法後,線程進入就緒狀态,等待排程器安排執行。

● run()方法:線程的執行體,也就是線程真正要執行的代碼。可以重載此方法以實作自己的邏輯。

● sleep()方法:使目前線程休眠,并且不會立即釋放鎖資源,指定的時間過後,線程會自動蘇醒,等待擷取鎖資源繼續執行。

● yield()方法:讓出CPU執行權,暫停目前正在執行的線程對象,并讓其他線程執行。但是這個暫停的時間是不确定的,有可能會立即又獲得CPU執行權。

● join()方法:等待其他線程終止。如果A線程執行了B線程的join()方法,表示A線程需要等待B線程執行完畢之後再執行。

● wait()方法:使目前線程進入等待狀态,并且釋放鎖資源。當調用這個方法時,所線上程會釋放它持有的對象的鎖,并使自己挂起,等待其他線程來喚醒它。

● notify()/notifyAll()方法:喚醒一個/所有正在等待該對象的線程,并且讓它們重新排隊競争該對象的鎖。通知等待池中的線程來競争鎖。

● interrupt()方法:中斷線程。調用此方法會設定一個中斷标志,然後線程會在合适的時候自行退出。

一、線程的建立方式:●繼承Thread類,重寫run()方法,建立新的Thread對象,調用start()方法啟動線程。
一、線程的建立方式:●繼承Thread類,重寫run()方法,建立新的Thread對象,調用start()方法啟動線程。
一、線程的建立方式:●繼承Thread類,重寫run()方法,建立新的Thread對象,調用start()方法啟動線程。

繼續閱讀