Java 如何進行線程同步

來源:文萃谷 2W

線程的同步知識也是公司面試必考知識,同學們在去面試前一定要複習一下,下面就給大家複習一下線程的知識:

Java 如何進行線程同步
Java 如何進行線程同步

  線程在執行過程中,可以處於下面幾種狀態:

就緒(Runnable):線程準備運行,不一定立馬就能開始執行。

運行中(Running):進程正在執行線程的代碼。

等待中(Waiting):線程處於阻塞的狀態,等待外部的處理結束。

睡眠中(Sleeping):線程被強制睡眠。

I/O阻塞(Blocked on I/O):等待I/O操作完成。

同步阻塞(Blocked on Synchronization):等待獲取鎖。

死亡(Dead):線程完成了執行。

  線程的同步主要靠下面幾個方法:

1、wait():使一個線程處於等待狀態,並且釋放所持有的'對象的lock,注意wait的線程是不會自動喚醒的。

2、sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常,注意這個方法是不會釋放鎖的,而是持有鎖停止多少秒後自動喚醒。

3、notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。

4、notityAll():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

熱門標籤