乐观锁与悲观锁(多线程)

原创 2016年08月31日 11:53:04

线程中的锁可以分为乐观锁和悲观锁,这两个都是实现锁机制的两种办法。

悲观锁:根据字面意思,悲观,就是不是太好的。当一个线程访问这个数据的时候,悲观锁会把这个数据给锁住,不被其他线程所访问,直到这个线程完成了对数据的提交后,其他线程才能够访问或者操作。这样就带来了不便,比如,我们在进行网上订票的时候,一个用户访问了这个系统,访问了这个系统中数据库的数据,就把这个数据给锁住了,这样其他用户根本就看不到数据。这样显然不行,我们想要的效果是用户都可以访问数据,但是只有一个用户提交对这个数据的修改。这就要乐观锁。

乐观锁:当用户要对这个数据进行修改操作时,才把这个数据锁住,也就是实现了一个用户提交操作的用途,它的好处是,用户在查看的时候,数据并没有锁住,当要修改提交的时候,把数据锁住,当其他用户再要提交修改时,就不能修改了。其中的乐观锁里面有一个版本控制器,当修改后,版本就+1,其他用户现在的版本还是0,这样在提交的时候,发现版本号低于现在的,所以,要更新,之后在进行修改。


声明:
该文仅作学习与记录之用,欢迎技术纠错和讨论;
非技术性言论皆为一家之谈,如有不同意见请坚持己见;
如有雷同可能为学习汝之所得,请各位巨人的肩膀还请继续空出位置。

版权声明:转载请注明出处。

从线程状态看乐观锁和悲观锁

1-1、众所周知线程有几种主要的状态即:新建、就绪、运行、阻塞、死亡状态。 2-1、悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每...

Java多线程系列-悲观锁和乐观锁实战

悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往...

Java 并发与多线程规范(4) 自旋锁是可重入的吗?CAS与自旋锁的关系,CAS的ABA问题,以及乐观锁,悲观锁,互斥锁,读写锁的整理

CASCAS,自旋锁跟compare and set有关系,但是并不是CAS就是自旋锁。我们看一段代码:/* 不同线程检测最大值 */ AtomicLong largest = new...
  • kkgbn
  • kkgbn
  • 2017年07月19日 15:06
  • 403

Hibernate锁机制_悲观锁和乐观锁

  • 2012年03月14日 19:31
  • 20KB
  • 下载

hibernate的乐观锁和悲观锁

  • 2012年02月21日 17:07
  • 42KB
  • 下载

Java 多线程:AtomicInteger源码分析——基于CAS的乐观锁实现

AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁         我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/p...

并发控制—悲观锁和乐观锁

  • 2012年02月08日 17:58
  • 35KB
  • 下载

hibernate乐观锁和悲观锁学习

  • 2011年08月23日 10:02
  • 36KB
  • 下载

Java 多线程10:CAS 与 AtomicInteger(乐观锁)

AtomicInteger源码分析——基于CAS的乐观锁实现悲观锁与乐观锁我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,...

Java多线程 -- JUC包源码分析1 -- CAS/乐观锁

乐观锁思想 乐观锁的几种具体实现 Java CAS原子操作/AtomicInteger实现 ABA问题/AtomicStampedReference实现 Mysql 乐观锁实现 Mysql MVCC ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:乐观锁与悲观锁(多线程)
举报原因:
原因补充:

(最多只允许输入30个字)