JAVA學習日誌(執行緒)
1.程序和執行緒
程序:執行一個速度,程式在記憶體分配了執行空間
執行緒:在程序中還執行,多個執行緒之間可以相互的切換。
問題程序和執行緒的關係?
程序包括執行緒。
2。單執行緒和多執行緒(JAVA搶佔)
單執行緒:只有一條路徑,必須等第一個執行了才能執行第二個。比如排隊吃飯。。。。
多執行緒:有多條路徑。。。比如食堂排隊的多個視窗。
3.執行緒分為主執行緒和子執行緒**
主執行緒就相當於遊戲中的主要任務。
子執行緒就相當於遊戲中的分支任務。
列題:
4.執行緒的優先級別
Java中共有10個級別,1到10個級別
從低到高,但它不能與作業系統很好的相容,比如Winw2000e7個優先級別,並且不固定的所有希望能移植到各個的平臺中,那麼建議使用 Max-PRIOKIT
MIN-PRIOKIT
NORN-PRIOKIT
注:高的級別是獲得較多的執行機會
低的級別是獲得較少的執行機會
5.問題區
問題:為什麼一到要複寫Run方法??
Start方法自動呼叫了run方法,run方法中可以自動加入自己想要得一些功能。
問題: 直接呼叫run方法和呼叫stat的方法的區別?
Run()方法:普通的方法不能啟動執行緒
Start()方法:啟動一個執行緒,自動的去呼叫run方法
publicfinalvoidjoin()
throwsInterruptedException
等待該執行緒終止。
等執行緒終止該執行緒結束後,才能往下執行
publicstaticvoidyield()暫停當前正在執行的執行緒物件,並執行其他執行緒。
禮讓,暫停當前正在執行的程式物件,並讓其他執行緒執行讓給相同優先順序的或者是更高的。
publicstaticvoidsleep(longmillis,intnanos)
throwsInterruptedException在指定的毫秒數加指定的納秒數內讓當前正在執行的執行緒休眠(暫停執行),此操作受到系統計時器和排程程式精度和準確性的影響。該執行緒不丟失任何監視器的所屬權
守護執行緒
setDaemon(布林值)設定是否為守護執行緒
也就是前臺完成後臺才能完成
比如:垃圾回收機制
結束執行緒
1)修改標誌
2)interrupt()
3)publicvoidinterrupt() 中斷執行緒。
如果當前執行緒沒有中斷它自己(這在任何情況下都是允許的),則該執行緒的checkAccess方法就會被呼叫,這可能丟擲SecurityException。
3)引發異常
注:儘量不要使用stop(太過於霸道會直接終止所有的執行)和
併發訪問的問題
資料的不準確性
Synchronized同步
Synchronized(this)同步塊;this同步當前物件
Synchronized同步方法
死鎖!
定義:死鎖是程序死鎖的簡稱,
例如:
在一條河上有一座橋,橋面較窄,只能容納一輛汽車通過,無法讓兩輛汽車並行。如果有兩輛汽車A和B分別由橋的兩端駛上該橋,則對於A車來說,它走過橋面左面的一段路(即佔有了橋的一部分資源),要想過橋還須等待B車讓出右邊的橋面,此時A車不能前進;對於B車來說,它走過橋面右邊的一段路(即佔有了橋的一部分資源),要想過橋還須等待A車讓出左邊的橋面,此時B車也不能前進。兩邊的車都不倒車,結果造成互相等待對方讓出橋面,但是誰也不讓路,就會無休止地等下去
執行緒的生命週期
新建:建立執行緒物件
就緒:有執行資格,沒有執行權,start()
執行:有執行資格,有執行權
死亡:執行緒物件變為垃圾,等待回收
轉載於:https://blog.51cto.com/conandoyle/1766509