Java多線程相關知識點

Java多線程相關知識點

什麼是線程和進程

線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以併發執行。線程有就緒、阻塞和運行三種基本狀態。
進程是所有線程的集合,每一個線程是進程中的一條執行路徑。

創建線程的方式

繼承Thread類

實現Runnable接口

使用匿名內部類

用戶線程和守護線程

所謂守護線程是指在程序運行的時候在後臺提供一種通用服務的線程,比如垃圾回收線程就是一個很稱職的守護者,並且這種線程並不屬於程序中不可或缺的部分。因此,當所有的非守護線程結束時,程序也就終止了,同時會殺死進程中的所有守護線程。反過來說,只要任何非守護線程還在運行,程序就不會終止。
守護線程和用戶線程沒有本質的區別:唯一的不同之處就在於虛擬機的離開:如果用戶線程已經全部退出運行了,只剩下守護線程存在了,虛擬機也就退出了。 因爲沒有了被守護者,守護線程也就沒有工作可做了,也就沒有繼續運行程序的必要了。

線程的運行狀態

線程運行狀態

新建狀態:當用new操作符創建一個線程時, 例如new Thread®,線程還沒有開始運行,此時線程處在新建狀態。 當一個線程處於新生狀態時,程序還沒有開始運行線程中的代碼
就緒狀態:一個新創建的線程並不自動開始運行,要執行線程,必須調用線程的start()方法。當線程對象調用start()方法即啓動了線程,start()方法創建線程運行的系統資源,並調度線程運行run()方法。當start()方法返回後,線程就處於就緒狀態。
運行狀態:當線程獲得CPU時間後,它才進入運行狀態,真正開始執行run()方法.
阻塞狀態: 線程運行過程中,可能由於各種原因進入阻塞狀態:
1 線程通過調用sleep方法進入睡眠狀態;
2 線程調用一個在I/O上被阻塞的操作,即該操作在輸入輸出操作完成之前不會返回到它的調用者;
3 線程試圖得到一個鎖,而該鎖正被其他線程持有;
4 線程在等待某個觸發條件;
死亡狀態:
線程運行過程中,可能由於各種原因進入阻塞狀態:
1 線程通過調用sleep方法進入睡眠狀態;
2 線程調用一個在I/O上被阻塞的操作,即該操作在輸入輸出操作完成之前不會返回到它的調用者;
3 線程試圖得到一個鎖,而該鎖正被其他線程持有;
4 線程在等待某個觸發條件;

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