Lock实现原理

                                          Lock实现原理 

Lock完全用Java写成,在java这个层面是无关JVM实现的。

在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurrent.AbstractQueuedSynchronizer类,实现思路都大同小异,因此我们以ReentrantLock作为讲解切入点。

实现Lock接口的类有很多,以下为几个常见的锁实现

  • ReentrantLock:表示重入锁,它是唯一一个实现了Lock接口的类。重入锁指的是线程在获得锁之后,再次获取该锁不需要阻塞,而是直接关联一次计数器增加重入次数
  • ReentrantReadWriteLock:重入读写锁,它实现了ReadWriteLock接口,在这个类中维护了两个锁,一个是ReadLock,一个是WriteLock,他们都分别实现了Lock接口。读写锁是一种适合读多写少的场景下解决线程安全问题的工具,基本原则是:读和读不互斥、读和写互斥、写和写互斥。也就是说涉及到影响数据变化的操作都会存在互斥。
  • StampedLock: stampedLock是JDK8引入的新的锁机制,可以简单认为是读写锁的一个改进版本,读写锁虽然通过分离读和写的功能使得读和读之间可以完全并发,但是读和写是有冲突的,如果大量的读线程存在,可能会引起写线程的饥饿。stampedLock是一种乐观的读策略,使得乐观锁完全不会阻塞写线程

JUC的atomic包下运用了CAS的AtomicBoolean、AtomicInteger、AtomicReference等原子变量类

JUC的locks包下的AbstractQueuedSynchronizer(AQS)以及使用AQS的ReentantLock(显式锁)、ReentrantReadWriteLock

附:运用了AQS的类还有:Semaphore、CountDownLatch、ReentantLock(显式锁)、ReentrantReadWriteLock

JUC下的一些同步工具类:CountDownLatch(闭锁)、Semaphore(信号量)、CyclicBarrier(栅栏)、FutureTask

JUC下的一些并发容器类:ConcurrentHashMap、CopyOnWriteArrayList

JUC下的一些Executor框架的相关类: 线程池的工厂类->Executors  线程池的实现类->ThreadPoolExecutor/ForkJoinPool

JUC下的一些阻塞队列实现类:ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中的锁(Lock)是用于实现线程同步的机制,确保多个线程之间对共享资源的访问是安全的。Lock接口定义了对共享资源的访问控制方法,常见的实现类有ReentrantLock和ReentrantReadWriteLock。 锁实现原理: 在Java中,锁的实现主要依赖于底层的操作系统提供的原语,如CAS(Compare and Swap)或Mutex。CAS是一种乐观锁机制,通过比较并交换的方式来实现对共享资源的访问控制。Mutex是一种互斥锁机制,通过对共享资源进行加锁和解锁操作来实现线程之间的同步。 动态代理: 动态代理是一种在运行时生成代理对象的机制,可以在不修改原始类的情况下为其添加额外的功能。Java中的动态代理主要依赖于两个接口:InvocationHandler和Proxy。InvocationHandler定义了代理对象要执行的方法,而Proxy则负责生成代理对象。 反射: 反射是Java中一种强大的机制,它允许程序在运行时获取类的信息并操作类或对象。通过反射,可以动态地创建对象、调用方法、访问字段等。Java中的反射主要依赖于Class类和java.lang.reflect包中的其他类。 总结: Java中的锁机制(Lock)是实现线程同步的重要工具,它依赖于底层的操作系统提供的原语。动态代理是一种在运行时生成代理对象的机制,可以为原始类添加额外的功能。而反射是Java中一种强大的机制,允许程序在运行时获取类的信息并操作类或对象。这些特性都为Java提供了更高级别的编程能力和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haikuotiankongdong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值