線程知識點概括,後續更新
- 後臺線程:設置Thread.setDaemon(true)就是後臺線程了。
前臺線程:不設置。
若是沒有前臺線程了,那麼整個程序都會結束。線程
- 線程的合併:Thread.join(10000);
將子線程加入主線程,兩個線程合併10秒後分開。對象
-
線程同步:生命週期
- synchronized(Object){ 代碼塊 } Object必須是同一個對象才能進行同步。
- 在方法前面加synchronized。new Thread(Object).start();start只是準備運行,處於準備狀態,並非肯定開始執行。
- 實現代碼塊與方法的同步:synchronized(Object),
Object爲Object.class(兩個爲同一個對象監視器)
死鎖:你等我,我等你同步
-
線程間的通訊:(要是同一個對象的waitnotifynotifyAll)it
- wait:告訴當前線程放棄監視器並進入睡眠狀態,直到其餘線程進入同一監視器並調用notify爲止。
- notify:喚醒同一對象監視器中調用wait的第一個線程。用於相似飯館有一個空位後通知全部等候就餐的顧客中的第一位能夠入座的狀況。
- notifyAll:喚醒同一對象監視器中調用wait的全部線程,具備最高優先級的線程首先被喚醒並執行。
- 生命週期:start-->runnable-->running-->run()方法完成
-
方法:io
- suspend(阻塞),resumen(恢復線程執行),stop()
- 以上方法容易形成死鎖。最好用一個變量去控制它的生命週期。
-
sleep方法:讓當前線程休眠。本身擁有鎖,不讓出。class
- 本身過一段時間能夠醒。
- 而wait方法,是在等待,讓出了鎖,須要別人叫醒。
- yield方法:讓出cpu,給其餘線程執行機會。
- 線程的優先級(Priority):默認爲5。