锁的优化机制了解吗?
最佳答案 问答题库538位专家为你答疑解惑
程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上
锁的优化机制是Java等编程语言中常见的一种提高并发性能的方法。锁的优化旨在减少锁的竞争,从而提高程序的性能。
常见的锁优化机制:
-
无锁
顾名思义就是没有对资源进行锁定,所有线程都能访问到同一资源。
-
偏向锁
偏向锁是一种针对无竞争情况的锁优化机制。它通过消除无谓的获取锁和释放锁的操作,提高了程序的性能。偏向锁会记录哪个线程正在访问某个对象,并且后续的访问请求如果是同一个线程,就可以直接访问,而不需要加锁。
-
轻量级锁
轻量级锁是一种针对单线程访问的情况的锁优化机制。它通过使用标记位或者CAS操作来对共享资源进行加锁和解锁,轻量级锁的竞争主要是通过CAS操作来替换对象头的Mark Word,如果成功则获得锁, 失败则会升级为重量级锁。
-
重量级锁
成本非常高, 其依赖于操作系统的互斥量(mutex)实现,该操作会导致进程从用户态与内核态之间的切换、线程阻塞造成的线程切换等。被锁对象的重量级锁的指针指向的是monitor对象(也称为管程或监视器锁)的起始地址。每个对象都存在一个monitor与之关联, monitor对象存在于每个Java对象的对象头中。
-
自旋锁
自旋锁是一种非阻塞的锁机制,当线程无法立即获取锁时,它会持续检查锁是否被释放,直到获取到锁为止。自旋锁可以减少线程的上下文切换开销,但在锁持有时间较长的情况下,会浪费CPU资源。
-
自适应锁
一种结合了自旋锁和阻塞锁的锁机制。在刚开始时,线程会采用自旋的方式来等待锁的释放,但随着时间的推移,如果锁仍然没有被释放,线程会逐渐切换到阻塞状态,从而减少CPU资源的浪费。
-
分段锁
分段锁是一种针对共享资源过多的情况下的锁优化机制。它将共享资源分成多个段,每个线程只需要对其中一部分进行加锁和解锁操作,从而减少了锁的竞争和开销。
-
乐观锁
乐观锁是一种基于冲突检测的锁机制。它假设多个线程同时访问和修改同一个数据的概率较小,因此在读取数据时不会加锁,而是在提交修改时检测是否存在冲突。如果存在冲突,则进行回滚或重试操作。乐观锁适用于读操作较多的场景。
-
锁粗化
指的是对同一个对象反复加锁和解锁的情况,Java就会把锁的同步范围扩展到整个操作之外。比如:连续的两个synchronized(lock){}代码块, 且锁的对象是相同的,那么这种情况就会使锁粗化,两个synchronized(lock){}代码块将会合并成一个synchronized(lock){}代码块。
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"锁的优化机制了解吗?":http://eshow365.cn/6-36862-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: vue中插槽slot
- 下一篇: 华为政企协作平板产品集