千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  技术干货  >  synchronized和AQS的区别?

synchronized和AQS的区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-11 15:09:33

一、synchronized和AQS的区别

1.ReentrantLock 显示的获得、释放锁, synchronized 隐式获得释放锁

2.ReentrantLock 可响应中断、可轮回, synchronized 是不可以响应中断的,为处理锁的不可用性提供了更高的灵活性

3.ReentrantLock 是 API 级别的, synchronized 是 JVM 级别的

4.ReentrantLock 可以实现公平锁

5.ReentrantLock 通过 Condition 可以绑定多个条件

6.底层实现不一样, synchronized 是同步阻塞,使用的是悲观并发策略, lock 是同步非阻塞,采用的是乐观并发策略

7.Lock 是一个接口,而 synchronized 是 Java 中的关键字, synchronized 是内置的语言实现。

8.synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而 Lock 在发生异常时,如果没有主动通过 unLock()去释放锁,则很可能造成死锁现象,因此使用 Lock 时需要在 finally 块中释放锁。

9.Lock 可以让等待锁的线程响应中断,而 synchronized 却不行,使用 synchronized 时,等待的线程会一直等待下去,不能够响应中断。

通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。

10.Lock 可以提高多个线程进行读操作的效率,既就是实现读写锁等

延伸阅读:

二、Synchronized的流程

0.先获取偏向锁,不行再自旋锁,获取到锁就是轻量级锁,如果自旋获取不到锁就是重量级锁。重量级锁的流程就是如下:1.竞争的线程进入contentionList,并迁移部分的竞选者到EntryList,此举是为了降低竞争(防止所有线程同时醒来去CAS获取锁)2.获取锁的线程会在unlock的时候唤醒entryList中的线程,该线程就是onDeck,注意并不是把锁给onDeck,而是允许他
和其他刚准备来获取锁的线程进行竞争(其他已经进入contentionList的线程不会去),这就是非公平性。3.onDeck获取成功则会变为Owner线程,如果owner线程被wait方法阻塞,则转移到WaitSet队列,该队列
会被notify和notifyAll唤醒并重新加入到entryList4.线程再进入ContentionList时候 会先自旋获取锁,获取不到就进入contentionList,这也是一个不公平的地方5.每个对象都有一个monitor对象,加锁就说竞争monitor对象。6.优化后的偏向锁和轻量级锁都是对对象头操作,不需要经过操作系统加锁。


以上就是关于synchronized和AQS的区别的内容希望对大家有帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

流式计算和实时计算有什么区别?

2023-10-11

720和1080p区别?

2023-10-11

数据结构 ->与.有什么区别?

2023-10-11

最新文章NEW

Python中container的items跟elements有什么区别?

2023-10-11

erp与sap的区别?

2023-10-11

子进程与父进程有什么区别?

2023-10-11

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>