在程式中啟動一個新線程運作一段代碼有兩種方式
一.繼承Thread類
1.子類覆寫父類中的run方法,将線程運作的代碼存放在run中。
2.建立子類對象的同時線程也被建立。
3.通過調用start方法開啟線程。
二.實作Runnable接口
1.子類覆寫接口中的run方法。
2.通過Thread類建立線程,并将實作了Runnable接口的子類對象作為參數傳遞給Thread類的構造函數。
3.Thread類對象調用start方法開啟線程。
Thread常用方法:
start(); -->啟動線程。
sleep(); -->線程休眠。
getName(); -->擷取目前線程的名稱。
currentThread(); -->擷取目前線程對象。
interrupt(); -->中斷線程的當機狀态,使線程回到運作狀态,并抛出異常。
setPriority(int num);-->設定線程優先級。
setDaemon(boolean b); -->設定是否是守護線程,即背景線程,前台線程結束,守護線程自動結束。
join(); -->當A線程執行到B線程的join()方法時,A線程會等待B線程結束後,再繼續執行。
yield(); -->放棄CPU控制權。
wait(); -->線程等待。
notify();-->喚醒第一個等待的線程。
notifyAll();-->喚醒所有等待的線程。
由于線程同步synchronized效率低,在JDK1.5中被Lock接口所替代。
ReentrantLock實作了Lock接口,常被Lock執行個體化;一個Lock對象上允許建立多個Condition對象。
Lock常用方法:
lock(); -->加鎖
unlock(); -->解鎖
Condition常用方法:
await(); -->Condition上的線程等待。
signal(); -->喚醒Condition上第一個等待的線程。
signalAll(); -->喚醒Condition上所有等待的線程。