天天看點

java多線程之:線程對象一些api

一:wait()方法,wait(long timeout)

--->鎖對象調用wait()方法,讓目前線程小a進入等待狀态,阻塞住,并讓出當先線程擁有的鎖。

--->直到其他線程用鎖對象調用notifyAll(),notify()将小a從wait虛拟隊列中将阻塞的線程喚醒。重新争鎖。

--->當别的線程對目前線程小a的對象調用interrupt()方法,則阻塞在wait虛拟隊列的線程抛出InterruptedException異常,打算阻塞。

--->wait(longtimeout)進入鎖對象虛拟隊列的線程在阻塞timeout長時間後,此時已經讓出鎖,自己自動喚醒,再次争搶鎖。

二:notifyAll()notify()方法

--->notifyAll()方法是将進入鎖對象wait隊列裡所有阻塞的線程喚醒,重新争取鎖。

--->notify()方法是将進入所對象wait虛拟隊列裡的阻塞的線程,拿出一個喚醒。

三:sleep(long time)

--->目前線程休眠time長時間,并不釋放鎖。

四:interrupt()

--->線程對象a.interrupt():将a線程的中斷标示位設定成true。

--->線程對象a.isInterrupted():擷取a線程的中斷标示位的值。

--->Thread.interrupted():傳回目前線程的中斷标示位的值,同時不管值是什麼在傳回前将該值設定為false;

--->當線程的中斷标示位為true的時候,線程如果在wait().sleep().join()中阻塞時候,或者即将進入的時候,都會抛出InterruptedException異常,從阻塞狀态中喚醒,并将狀态位設定為false.

五:join()方法

--->線上程x的線程體中用線程a.join()時,則線程x的線程體就會阻塞到a.join()這句代碼這,等待a線程的線程體運作完畢,線程x的線程體的代碼才從a.join()這句代碼開始往後執行。

--->join(long time):代表線程x會阻塞time秒時間,線程a運作正常,time秒後線程x開始從阻塞位置向下執行代碼

--->底層是wait(),不考慮鎖。

六:yeid()方法

--->那個線程調用此方法,那個線程暫時一次讓出CPU排程權。至于能否暫停,實際看cpu是否将時間片分給其他的線程。我主動放棄一次,至于cpu走不走,看cpu的。

七:isAlive()方法

--->線程a.isAlive(),如果線程a的線程體還未執行完,則傳回true,如果線程a的線程還未啟動,活着線程體已經運作完,則傳回false

--->來判斷一個線程是否還活着

八:getstate()方法

--->擷取線程的運作狀态

--->NEW 建立狀态

--->RUNNABLE 運作(可運作)狀态

--->BLOCKED     阻塞狀态

--->TIMED_WAITING     休眠狀态

--->WAITING     等待狀态

--->TERMINATED     終止狀态