logo头像

BUG本天成,妙手偶得之

探索JAVA并发 - 悲观锁和乐观锁

什么是悲观锁,什么是乐观锁,它们是如何实现的? 定义 悲观锁:对世界充满不信任,认为一定会发生冲突,因此在使用资源前先将其锁住,具有强烈的独占和排他特性。 乐观锁:相信世界是和谐的,认为接下来的操作不会和别人发生冲突,因此不会上锁...

探索JAVA并发 - 可重入锁和不可重入锁

什么是可重入锁,什么是不可重入锁,它们是如何实现的? 定义 可重入锁:当线程获取某个锁后,还可以继续获取它,可以递归调用,而不会发生死锁; 不可重入锁:与可重入相反,获取锁后不能重复获取,否则会死锁(自己锁自己)。 不可重入锁用...

探索JAVA并发 - 如何减少锁的竞争

锁的竞争会限制代码的可伸缩性,在并发编程时通过一些手段有意地减少锁竞争,可以让程序有更好的表现。 所谓可伸缩性,即当增加计算资源(如CPU、内存、带宽等)时,程序的吞吐量或处理能力会相应增加。这个时候,我们当然希望增加的效果越明显...

探索JAVA并发 - synchronized和ReentrantLock如何选择

synchronized、ReentrantLock,我该为谁转身? 两者的区别: synchronized:内置锁,即JVM的内置属性,在虚拟机层面实现了对锁的支持 ReentrantLock:Lock接口的一种实现,即通过代...