锁的分类 自旋锁: 线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁上下文切换不值得。jvm实现,使线程在没获得锁的时候,不被挂起,转而执行空循环,循环几次之后,如果还没能获得锁,则被挂起。 阻塞锁:阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者时间 ...
分类:
编程语言 时间:
2019-09-01 10:57:54
阅读次数:
82
Lock的使用 代码: 结果: lock与synchronized的区别 lock 获取锁与释放锁的过程,都需要程序员手动的控制 Lock用的是乐观锁方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就 是CAS操作 synchr ...
分类:
编程语言 时间:
2019-09-01 10:28:27
阅读次数:
59
之前一直对锁的知识半知半解,写篇博客巩固下。 1、悲观锁、乐观锁 悲观锁每次操作都会加锁,会造成线程堵塞。而乐观锁则是假设不会冲突,每次操作都不会加锁。所以相较而言,乐观锁比较适合于竞争较少的场景,悲观锁比较适合竞争严重的情况。 2、公平锁、非公平锁 如果多个线程按照申请锁的顺序来获取锁,则是公平锁 ...
分类:
编程语言 时间:
2019-08-31 00:50:34
阅读次数:
78
一.悲观锁、乐观锁的区别: 悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行,只有一个线程可以执行,其他线程在入口处等待,直到锁被释放。乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行,可以同时进入执行,在最后跟新数据时候检查这些数据是否被其他线程修改,(版本和执行初是否相同),没有修改进行跟新,有 ...
分类:
编程语言 时间:
2019-08-28 11:30:14
阅读次数:
118
本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助。 什么是悲观锁、乐观锁?在java语言里,总有一些名词看语义跟本不明白是啥玩意儿,也就总有部分面试官拿着这样的词来忽悠面试者,以此来找优越感,其实理解清 ...
分类:
编程语言 时间:
2019-08-26 19:27:16
阅读次数:
92
ES并发冲突 举个例子,比如是电商场景下,假设说,我们有个程序,工作的流程是这样子的: 我们比如咱们的程序就是多线程的,所以可能有多个线程并发的去执行上述的3步骤流程 有一个牙膏,库存100件,现在,同时有两个人都过来读取了牙育的数据,然后下单购买了这管牙膏,此时两个线程并发的服务于两个人,同时在进 ...
分类:
其他好文 时间:
2019-08-20 12:19:17
阅读次数:
343
原文: http://blog.gqylpy.com/gqy/382 " 乐观锁 总是认为不会产生并发问题,每次去取数据时总认为不会有其它线程对数据进行修改,因此不会上锁。 但是在更新时会判断其它线程在这之前有没有对数据进行修改,一般会使用版本号机制会CAS操作实现。 __版本号方式__   ...
分类:
数据库 时间:
2019-08-19 09:32:18
阅读次数:
79
何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。 悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数 ...
分类:
其他好文 时间:
2019-08-15 12:33:00
阅读次数:
76
悲观锁: 悲观锁悲观的认为每一次操作都会造成更新丢失问题,在每次查询时加上排他锁 每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 ...
分类:
其他好文 时间:
2019-08-10 10:13:21
阅读次数:
99
一、前言 分布式锁一般有三种实现方式: 1. 数据库乐观锁; 2. 基于Redis的分布式锁; 3. 基于ZooKeeper的分布式锁。 本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本 ...
分类:
其他好文 时间:
2019-08-09 13:31:15
阅读次数:
96