乐观锁及乐观锁的实现

拼命工作好好玩 2019-06-27

乐观锁

乐观锁及乐观锁的实现


因为热爱,所以拼搏。 --RuiDer


前导必备

  • Java并发锁的含义
  • 悲观锁
  • 数据库

高并发

高并发简单理解就是在服务器中,成千上完个客户端在同一时间内发
起对服务器端的请求,包括数据的请求,这时服务器后端需要在极短时内处
理客户端的请求并且响应,在互联网平台,追求的是速度和时间,所以,
这就对服务器端有非常大的考验。
    一般客户端发起请求,服务器端接到请求,首先去处理相应的数据,
这就涉及到数据库中的数据操作,或者是缓存中的数据处理,总之要与数据库打交道。
操作数据库数据包括数据的查询,编辑,更新等。

高并发产生的问题

不同的线程在同一时间对同一数据的读取和更新产生冲突。可能会出现线程A读取
的数据不是最新值,线程B更新的数据覆盖其他线程对该数据的更新。这些问题
都是高并发带来的,即高并发产生的问题。
高并发冲突分类:
    - 数据丢失
    - 脏读

Java提供锁的支持,通俗的理解就是锁对某些数据具有保护作用,防止某一数据在同一时间
被多个线程操作。
锁的分类:
    - 悲观锁:持保守态度,只能由某一个线程持有,其他线程等待持有锁的线程释放锁。性能差
    - 乐观锁:下面讲
    - 其他锁:像自旋锁,轻量级锁等

乐观锁概念

对于每一个数据或者数据集合,设有一个标识version(字段),
当线程读取数据时,同时会读取出标识版本version的值,进行更
新时,首先比较当前数据库字段version的值是否与读取出的
version值相等,如果相等,则更新值,否则,作为过期值丢弃。

乐观锁的实现

实现一:
        比如一个数据库表的结构是
        id value version三个字段
        当进行数据的更新时,首先读取:
        select value version from table where id=x;
        其次更新:
            update table set value=newValue, version=oldVersion+1 where id=x and version=oldVersion;

实现二:
    cas算法:Compare And Swap算法,即有三个值,内存值,预期旧值,新值,
比较内存值是否与当前预期值相等,如果相等,则替换新值,否则,不做任何处理。

about me

我的博客

我的github

相关推荐

趣IT / 0评论 2019-11-01