1. 程式人生 > 實用技巧 >JAVA學習日誌(執行緒)

JAVA學習日誌(執行緒)

1.程序和執行緒


程序:執行一個速度,程式在記憶體分配了執行空間

執行緒:在程序中還執行,多個執行緒之間可以相互的切換。


問題程序和執行緒的關係?

程序包括執行緒。


2。單執行緒和多執行緒JAVA搶佔)

單執行緒:只有一條路徑,必須等第一個執行了才能執行第二個。比如排隊吃飯。。。。


wKioL1cZEI6Q2bqoAACmJG9Hjn8226.jpg

多執行緒:有多條路徑。。。比如食堂排隊的多個視窗。

wKioL1cZEKqBFKMRAAChU9HRIVc418.jpg


3.執行緒分為主執行緒和子執行緒**

wKioL1cZELfRa0TyAAB0oB8ls0Y507.jpg

主執行緒就相當於遊戲中的主要任務。

子執行緒就相當於遊戲中的分支任務。


列題:

wKiom1cZEAWB9QLAAAInSqasVeI894.jpg


4.執行緒的優先級別

Java中共有10個級別,110個級別

從低到高,但它不能與作業系統很好的相容,比如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修改標誌

2interrupt()

3publicvoidinterrupt() 中斷執行緒。

如果當前執行緒沒有中斷它自己(這在任何情況下都是允許的),則該執行緒的checkAccess方法就會被呼叫,這可能丟擲SecurityException

3引發異常

:儘量不要使用stop(太過於霸道會直接終止所有的執行)和

併發訪問的問題

資料的不準確性

Synchronized同步

Synchronizedthis)同步塊;this同步當前物件

Synchronized同步方法

死鎖!

wKioL1cZEQmCSsW7AAC-hWjskBg382.jpg



定義:死鎖是程序死鎖的簡稱,

例如:

在一條河上有一座橋,橋面較窄,只能容納一輛汽車通過,無法讓兩輛汽車並行。如果有兩輛汽車AB分別由橋的兩端駛上該橋,則對於A車來說,它走過橋面左面的一段路(即佔有了橋的一部分資源),要想過橋還須等待B車讓出右邊的橋面,此時A車不能前進;對於B車來說,它走過橋面右邊的一段路(即佔有了橋的一部分資源),要想過橋還須等待A車讓出左邊的橋面,此時B車也不能前進。兩邊的車都不倒車,結果造成互相等待對方讓出橋面,但是誰也不讓路,就會無休止地等下去

執行緒的生命週期

新建:建立執行緒物件

就緒:有執行資格,沒有執行權,start(

執行有執行資格,有執行權

wKioL1cZEVGCt1XDAAA5PzlhtMY920.jpg



死亡:執行緒物件變為垃圾,等待回收

wKiom1cZEOWDCULOAADZPUzUoGk912.jpg



轉載於:https://blog.51cto.com/conandoyle/1766509