这就涉及到了Java中锁的重要特性:可重入性,也就是今天的主题。 1 可重入 所谓重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的。synchronized和ReentrantLock都是可重入锁。 好处: 避免死锁,提升封装性(如果不可重入,假设method1拿到锁之后,在method...
而非可重入锁则是在确定当前线程是持有锁的线程之后,直接将status置为0,将锁释放。 测试lock 锁的可重入性 我们使用 lock.getHoldCount() 打印下获取锁的次数 多次获取锁,与释放锁 会发现锁不用等待,下一次依然可以获取到锁,这就是锁的可重入锁性 不可重入锁 不可重入锁,与可重入锁相反,不可递归调用,递归...
当前线程执行print()方法首先获取lock,接下来执行doAdd()方法就无法执行doAdd()中的逻辑,必须先释放锁。这个例子很好的说明了不可重入锁。 可重入锁 接下来,我们设计一种可重入锁 所谓可重入,意味着线程可以进入它已经拥有的锁的同步代码块儿。 我们设计两个线程调用print()方法,第一个线程调用print()方法获取锁...
可重入锁:指的是同一个线程外层函数获得锁之后,内层仍然能获取到该锁,在同一个线程在外层方法获取锁的时候,在进入内层方法或会自动获取该锁 不可重入锁:即若当前线程执行某个方法已经获取了该锁,那么在方法中尝试再次获取锁时,就会获取不到被阻塞 /*** 可重入锁实现*/publicclassReentrantLock {booleanisLocked ...
探索JAVA并发 - 可重入锁和不可重入锁 本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 锁的简单应用 ...
Java中可重入锁和不可重入锁 本章介绍介绍重入锁和不可重入锁的相关概念,以及使用简单的例子帮助理解什么是重入锁和不可重入锁。 可重入锁(ReentrantLock和synchronized) 可以重入锁的概念是一个线程可以对某个锁进行加锁,在不释放的情况下对该锁进行多次加锁,在释放的时候也需要进行多次释放,即成对出现。换句话说...