随笔分类 - java中用到的锁
摘要:先聊下redis普通的分布式锁,用 1.单节点、主从/哨兵模式的分布式锁,安全吗? 或许你了解过,通过如下方式加锁: 设置锁时,使用set命令,因为其包含了setnx,expire的功能,起到了原子操作的效果,给key设置随机值,并且只有在key不存在时才设置成功返回True,并且设置key的过期时
阅读全文
摘要:Synchronize是重量级锁吗?是互斥锁吗? 它的实现原理? 前言 线程安全是并发编程中的重要关注点,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多个线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时
阅读全文
摘要:经典的ABA问题: ABA问题存在CAS无锁方案中,我们写一个CAS的伪代码栗子: class SimulatedCAS{ volatile int count; int newValue; //实count+=1 addOne(){ do { newValue=count+1; //① }whil
阅读全文
摘要:举个栗子: 原子性问题我们前面一直都是采用的互斥锁方案。 其实对于简单的原子性问题,还有一种无锁方案。Java SDK 并发包将这种无锁方案封装提炼之后,实现了一系列的原子类。 下面 Test中add的方法在,在多线程的情况下count最终可能<100000;因为 add 方法是非线程安全的。 1
阅读全文
摘要:StampedLock 支持的三种锁模式 写锁、悲观读锁和乐观读 我们先来看看在使用上 StampedLock 和上一篇文章讲的 ReadWriteLock 有哪些区别。ReadWriteLock 支持两种模式:一种是读锁,一种是写锁。而 StampedLock 支持三种模式。其中写锁、悲观读锁的语
阅读全文
摘要:你可能有这样一个疑问,Java SDK 并发包里为什么还有很多其他的工具类呢?原因很简单:分场景优化性能,提升易用性。 针对读多写少这种并发场景,Java SDK 并发包提供了读写锁——ReadWriteLock 读写锁,并不是 Java 语言特有的,而是一个广为使用的通用技术,所有的读写锁都遵守以
阅读全文

浙公网安备 33010602011771号