ReentrantLock与synchronized有何核心原理差异?

2026-06-10 09:075阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1353个文字,预计阅读时间需要6分钟。

ReentrantLock与synchronized有何核心原理差异?

ReentrantLock原理与重入锁

ReentrantLock是支持重入的锁,表示该锁可以被同一个线程多次获取。它允许一个线程对资源重复加锁,而不会造成死锁。这意味着,当一个线程已经持有该锁时,它可以再次获取该锁,而不会阻塞自己。

重入锁的含义是,当一个线程获取到锁后,可以在同一个线程中再次获取该锁,而不会导致死锁。这表示该锁可以支持同一个线程对同一资源的多重加锁,而不会阻塞自己。

@[toc]

ReentrantLock原理

重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁,而不会造成自己阻塞自己。重进入是指任意线程在获取到锁之后能够再次获取该锁而不会被锁所阻塞。ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进入,但是在调用lock()方法时,已经获取到锁的线程,能够再次调用lock()方法获取锁而不被阻塞。除此之外,该锁的还支持获取锁时的公平和非公平性选择。实际上,公平的锁机制往往没有非公平的效率高,但是,并不是任何场景都是以TPS作为唯一的指标,公平锁能够减少“饥饿”发生的概率,等待越久的请求越是能够得到优先满足。公平性锁保证了锁的获取按照FIFO原则,而代价是进行大量的线程切换。非公平性锁虽然可能造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。在Java里一共有两类锁, 一类是synchornized同步锁,还有一种是JUC里提供的锁Lock,Lock是个接口,其核心实现类就是ReentrantLock。ReentrantLock主要利用CAS+AQS队列来实现 ,主要是采用自旋锁,循环调用CAS操作来实现加锁,避免了使线程进入内核态的阻塞状态。CAS:Compare and Swap,比较并交换。

阅读全文

本文共计1353个文字,预计阅读时间需要6分钟。

ReentrantLock与synchronized有何核心原理差异?

ReentrantLock原理与重入锁

ReentrantLock是支持重入的锁,表示该锁可以被同一个线程多次获取。它允许一个线程对资源重复加锁,而不会造成死锁。这意味着,当一个线程已经持有该锁时,它可以再次获取该锁,而不会阻塞自己。

重入锁的含义是,当一个线程获取到锁后,可以在同一个线程中再次获取该锁,而不会导致死锁。这表示该锁可以支持同一个线程对同一资源的多重加锁,而不会阻塞自己。

@[toc]

ReentrantLock原理

重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁,而不会造成自己阻塞自己。重进入是指任意线程在获取到锁之后能够再次获取该锁而不会被锁所阻塞。ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进入,但是在调用lock()方法时,已经获取到锁的线程,能够再次调用lock()方法获取锁而不被阻塞。除此之外,该锁的还支持获取锁时的公平和非公平性选择。实际上,公平的锁机制往往没有非公平的效率高,但是,并不是任何场景都是以TPS作为唯一的指标,公平锁能够减少“饥饿”发生的概率,等待越久的请求越是能够得到优先满足。公平性锁保证了锁的获取按照FIFO原则,而代价是进行大量的线程切换。非公平性锁虽然可能造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。在Java里一共有两类锁, 一类是synchornized同步锁,还有一种是JUC里提供的锁Lock,Lock是个接口,其核心实现类就是ReentrantLock。ReentrantLock主要利用CAS+AQS队列来实现 ,主要是采用自旋锁,循环调用CAS操作来实现加锁,避免了使线程进入内核态的阻塞状态。CAS:Compare and Swap,比较并交换。

阅读全文