蟠桃為什么是扁的 蟠桃為什么是扁的傳說
2022-12-03
更新時間:2022-07-27 04:37:41作者:佚名
synchronize和lock區(qū)別如下:
1、synchronized和lock的用法區(qū)別。synchronized:在需要同步的對象中加入此控制,synchronized可以加在方法上,也可以加在特定代碼塊中,括號中表示需要鎖的對象。lock:需要顯示指定起始位置和終止位置。一般使用ReentrantLock類做為鎖,多個線程中必須要使用一個ReentrantLock類做為對象才能保證鎖的生效。且在加鎖和解鎖處需要通過lock()和unlock()顯示指出。所以一般會在finally塊中寫unlock()以防死鎖。
2、synchronized和lock性能區(qū)別。synchronized是托管給JVM執(zhí)行的,而lock是java寫的控制鎖的代碼。在Java1.5中,synchronize是性能低效的。因為這是一個重量級操作,需要調(diào)用操作接口,導致有可能加鎖消耗的系統(tǒng)時間比加鎖以外的操作還多。相比之下使用Java提供的Lock對象,性能更高一些。但是到了Java1.6,發(fā)生了變化。synchronize在語義上很清晰,可以進行很多優(yōu)化,有適應自旋,鎖消除,鎖粗化,輕量級鎖,偏向鎖等等。導致在Java1.6上synchronize的性能并不比Lock差。官方也表示,他們也更支持synchronize,在未來的版本中還有優(yōu)化余地。
3、synchronized和lock用途區(qū)別。synchronized原語和ReentrantLock在一般情況下沒有什么區(qū)別,但是在非常復雜的同步應用中,請考慮使用ReentrantLock。