Java中的synchronized關鍵字是用來實現線程同步的機制。它可以應用于方法或代碼塊,并且保證同一時刻只有一個線程能夠進入被synchronized修飾的方法或代碼塊,從而保證了線程安全。
底層原理如下:
在Java中,每個對象都有一個監視器鎖(也稱為內置鎖或互斥鎖)。當線程進入synchronized修飾的方法或代碼塊時,它會嘗試獲取對象的監視器鎖。
當一個線程獲取到鎖時,其他線程就無法獲取到該鎖,只能等待。當線程執行完synchronized修飾的方法或代碼塊后,會釋放鎖,其他線程可以繼續嘗試獲取鎖。
需要注意的是,synchronized關鍵字的鎖的粒度是對象級別的。也就是說,當一個對象的某個方法被synchronized修飾時,其他線程無法同時調用該對象的其他synchronized修飾的方法。但是,如果多個線程調用不同對象的方法,它們之間不會相互阻塞。