1. 程式人生 > >synchronized和Lock有什麼區別(不看後悔,看了必懂)

synchronized和Lock有什麼區別(不看後悔,看了必懂)

java語言中提供了兩種鎖機制來實現對某個共享資源的同步:synchronized和Lock.其中synchronized使用Object物件本身的notify,wait和notifyAll來實現執行緒之間的排程.而Lock可以使用Condition程序執行緒之間的排程

①用法不同

synchronized可以加在方法上,也可以加在特定的程式碼塊中,括號中表示需要鎖的物件

Lock需要顯式地指定起始位置和終止位置

②效能不一樣

JDK中增加了一個介面的實現類ReentrantLock.在資源競爭不是很激烈的情況下,synchronized的效能要優先於ReentrantLock,但是在競爭很激烈的情況下,synchronized的效能會下降得非常快,而ReentrantLock的效能幾乎不變

③鎖機制不一樣

當synchronized獲取多個鎖時,必須以相反的順序釋放,並且是自動解鎖;而Lock則需要開發人員手動釋放鎖,並且必須在finally塊中釋放,否則會引發死鎖問題的發生

 

注意:雖然synchronized和Lock都可以實現多執行緒的同步,但是,最好不要同時使用這兩種同步機制因為Lock和synchronized使用的鎖機制不一樣,所以它們的執行是相互獨立的,在使用時互不影響

 

 

當一個執行緒進入一個物件的synchronized方法後,其他執行緒是否可以進入此物件的其他方法?

①如果其他方法是非synchronized方法,則可以

②如果其他方法是靜態的synchronized方法,則可以,因為它使用的同步鎖是當前類位元組碼

③如果其他方法是synchronized方法,但是內部呼叫了wait()方法,則可以