synchronize关键字

synchronized 关键字底层做了哪些优化

JDK1.6后synchronize引入了,偏向锁,轻量锁,自旋锁,锁消除,锁粗化等技术为了减少锁的操作开销

锁有四种状态,他们会随着竞争越激烈而升级,锁只能升级不会降级,提高对获得锁和释放锁的效果

1:无锁状态

2:偏向锁状态

3:自旋锁状态

4:重量级锁状态


synchronized和ReentrantLock区别是什么?

synchronize和ReentrantLock都是可重入锁,就是只要对象没有释放锁还是可以获取对象的

synchronize是JVM层面的,ReentrantLock是JDK层面的

synchronize和ReentrantLock控制等待和唤醒也是不同的,synchronize需要调用wait方法进入等待状态,需要其他线程调用notify和notifyall方法才能唤醒,ReentrantLock进入等待状态要调用await方法,唤醒要调用signal和signalAll方法

synchronize在竞争资源时会一直等待,ReentrantLock可以尝试获取锁,并得到获取结果

synchronize加锁代码在执行完任务或则出现异常后会释放锁,ReentrantLock不会释放锁,需要在finally代码块显示释放

synchronize是无法实现公平锁的,ReentrantLock可以满足公平锁的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容