線程分類---------------------------------- java
線程分爲兩種:
1.用戶線程;即通常的線程
2.守護線程;這是一種特殊的線程,它的特性有「陪伴」的意思,當進程中不存在非守護線程,則守護線程自動銷燬,例A線程中啓動了B守護線程,那麼B就會一直"陪伴"着A線程,若是A線程結束了,那麼B線程也會自動的銷燬。就是說啓動守護線程的線程,纔是守護的對象。 api
線程的優先級--------------------------- 安全
優先及高的線程獲得cpu的資源將越多,也就越先執行這個線程 jvm
1.設置線程的優先級使用setPriority.java中線程優化級分爲1-10個等級,jdk用三個常量來定義:
MIN_PRIORITY = 1
NORM_PRIORITY = 5
MAX_PRIORITY = 10 優化
2.線程有繼承性,即A線程啓動了B線程,那麼B線程的優先級與A同樣 this
線程安全問題----------------------------------------- spa
1.從jvm結構上看:在jvm中有個棧,這個棧是專門存在java線程的信息,而每一個線程都有它們各自的領地。棧中主要存放的是方法的棧幀,每當調用一個方法時就產生出一個棧幀,當方法調用結束就將對應的棧幀彈出銷燬。與其銷燬的還有方法中調用的變量,因此說若是方法中都只有私有變量,那就不可能產生線程安全問題。 線程
2.那也說線程安全問題存在於"實例變量"中,若是多個線程共同訪問1個對象,纔有可能出現線程的安全問題。 對象
api--------------------------------------------- 繼承
start
啓動一個線程,但若是屢次啓動會拋出IllegalThreadStateException。要注意的是start啓動的順序不表明線程啓動的順序
currentThread
返回調用該代碼段的線程
isAlive
判斷當前的線程是否處於活動狀態(線程已經啓動且還沒有終止)
sleep
讓當前「正在執行的線程」休眠,」正在執行線程「指this.currentThread()返回的線程
getId
取得線程的惟一標識
interrupt
在當前線程中打上了一箇中止標識,並不會當即中止線程
stop
當即中止線程,是很是暴力且不安全。該方法已經被廢棄,由於若是強制讓線程中止則有可能使一些清理性的工做得不到完成。另一個狀況就是對鎖定的對象進行了」解鎖「,致使數據得不到同步的處理,出現數據不一致的問題。
suspend
暫停線程,可使用resume恢復線程
yield 放棄當前的cpu資源,將它讓給其餘的任務去佔用cpu執行時間,但放棄的時間不肯定,有可能剛放棄又立刻得到cpu的時間片。