成都網(wǎng)站建設(shè) 創(chuàng)新互聯(lián)今日搜索排行榜
一.一個線程的生命周期有哪幾種狀態(tài)?它們之間如何流轉(zhuǎn)的?
NEW:毫無疑問表示的是剛創(chuàng)建的線程,還沒有開始啟動。
RUNNABLE: 表示線程已經(jīng)觸發(fā) start()方式調(diào)用,線程正式啟動,線程處于運行中狀態(tài)。
BLOCKED:表示線程阻塞,等待獲取鎖,如碰到 synchronized、lock 等關(guān)鍵字等占用臨界區(qū)的情況,一旦獲取到鎖就進行 RUNNABLE 狀態(tài)繼續(xù)運行。
WAITING:表示線程處于無限制等待狀態(tài),等待一個特殊的事件來重新喚醒,如通過wait()方法進行等待的線程等待一個 notify()或者 notifyAll()方法,通過 join()方法進行等待的線程等待目標(biāo)線程運行結(jié)而喚醒,一旦通過相關(guān)事件喚醒線程,線程就進入了 RUNNABLE 狀態(tài)繼續(xù)運行。
TIMED_WAITING:表示線程進入了一個有時限的等待,如 sleep(3000),等待 3 秒后線程重新進行 RUNNABLE 狀態(tài)繼續(xù)運行。
TERMINATED:表示線程執(zhí)行完畢后,進行終止?fàn)顟B(tài)。需要注意的是,一旦線程通過 start 方法啟動后就再也不能回到初始 NEW 狀態(tài),線程終止后也不能再回到RUNNABLE 狀態(tài)。
二.線程中的 wait()和 sleep()方法有什么區(qū)別?
這個問題常問,sleep 方法和 wait 方法都可以用來放棄 CPU 一定的時間,不同點在于如果線程持有某個對象的監(jiān)視器,sleep 方法不會放棄這個對象的監(jiān)視器,wait方法會放棄這個對象的監(jiān)視器。
三.多線程同步有哪幾種方法?
Synchronized 關(guān)鍵字,Lock 鎖實現(xiàn),分布式鎖等。
四.什么是死鎖?如何避免死鎖?
死鎖就是兩個線程相互等待對方釋放對象鎖。
五.多線程之間如何進行通信?
wait/notify