背景
volatile是Java提供的一种轻量级的同步机制。与 synchronized
块相比(synchronized通常称为重量级锁),volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized
的一部分。
2020.6.1 update/ 2021.5 update:
今天和室友讨论,发现大家都看的是 乐观锁、悲观锁,这一篇就够了!来学习乐观并发控制和悲观并发控制。
然而,这篇文章中提到了“乐观锁”的概念,这个词这可能会带来confusion
- 因为“乐观并发控制”本身 imply 使用到了锁(lock),而锁本来就是悲观的(pessimistic),这与乐观(optimistic)相互矛盾
- 另外,乐观并发控制其实描述的是一种进行并发控制(concurrent control)的思想,在这种思想中并不存在锁
- 因而,就可能导致 confusion
- 如果称为乐观并发控制(optimistic concurrent control),就会更准确。因而在本文中,不会使用“乐观锁”这个词,而是使用乐观并发控制。
- 也可能称为无锁并发控制(lock-free concurrent control)
其实,搜索一下"optimistic locking",发现仍然还是有很多的结果,这说明这个confusion其实不是因为是翻译错误的原因。
今天突然意识到了这个问题,于是重新更新了这篇 blog。
需要并发控制(Concurrency Control),其实是为了实现某些一致性规则(consistency rules)。
需要并发控制的一些场景:
synchrinzed
方法对应地,如果需要并发控制机制,但又没有应用任何并发控制机制,自然会产生某些问题,典型的包括:
乐观并发控制(Optimistic Concurrency Control)对应于生活中乐观的人总是想着事情往好的方向发展,悲观并发控制(Pessimistic Concurrency Control)对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。
...