JAVA中的對象鎖是用于多線程同步訪問共享資源的機制。在JAVA中,每個對象都有一個相關聯的監視器(monitor),當只有一個線程能夠獲得該監視器時,該線程就能夠獲得該對象的所有鎖。如果有多個線程都想訪問同一個共享資源,那么只能有一個線程能夠獲得該監視器并且獲得對象的鎖。其他線程會進入等待狀態,等待對象鎖的釋放。
JAVA中的等待隊列是用于線程安全的等待通知機制。當一個線程調用對象的wait()方法時,該線程會釋放對象的鎖并且進入等待狀態,同時該線程會進入等待隊列。只有當另外一個線程調用喚醒方法notify()或者notifyAll()時,等待隊列中的線程才會被喚醒并且重新獲得對象的鎖,從而繼續執行。
public class Example { Object lock = new Object(); public void exampleMethod(){ synchronized(lock){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
上面的代碼演示了JAVA中等待隊列的使用。當線程調用exampleMethod方法時,該線程會進入同步塊并且獲得對象lock的鎖。接著線程調用lock.wait()方法,釋放了對象lock的鎖并且進入等待狀態,同時進入等待隊列中。當另一個線程執行了lock.notify()方法時,等待隊列中的線程被喚醒并且重新獲得對象lock的鎖,從而繼續執行方法。