Java中锁的概念 自旋锁 : 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断判断锁是否能够被成功获取,直到获取到锁才会退出循环。 乐观锁 : 假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改 悲观锁 :假定会发生并发冲突 ...
分类:
编程语言 时间:
2019-07-24 00:11:37
阅读次数:
127
乐观锁:认为数据修改产生冲突的概率并不大,所以不会先获取锁,一般都是使用版本号或者时间戳来标记,若A和B同时修改数据,当A修改完毕的同时将时间戳也替换为自己修改的时间戳,则B去修改时就会发现此条数据已经被修改过,则此次B则无法修改 优点:不对数据加锁,只有在对数据进行修改操作时才会进行校验不会影响服 ...
分类:
编程语言 时间:
2019-07-23 17:19:51
阅读次数:
99
网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘。本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底层实现浅尝辄止,但是在需要时能够知道去查什么。 首先要打消一种想法,就是一个锁只能属于一种分类。其实 ...
分类:
编程语言 时间:
2019-07-22 18:03:41
阅读次数:
107
一乐观锁总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在
分类:
其他好文 时间:
2019-07-17 14:01:10
阅读次数:
90
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 (1) 在操 ...
分类:
其他好文 时间:
2019-07-16 08:43:13
阅读次数:
95
网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘。本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底层实现浅尝辄止,但是在需要时能够知道去查什么。 首先要打消一种想法,就是一个锁只能属于一种分类。其实 ...
分类:
编程语言 时间:
2019-07-11 12:58:27
阅读次数:
140
三四百的并发量的防止超卖问题可以用数据库的悲观锁和乐观锁。 悲观锁比乐观锁(失败重试)效率更高。因为这和响应速度 冲突频率 重试代价有关。。乐观锁的冲突频率和重试太多。 ...
分类:
其他好文 时间:
2019-07-11 00:24:54
阅读次数:
132
一. 安全性问题 线程安全的本质是正确性,而正确性的含义是程序按照预期执行 理论上线程安全的程序,应该要避免出现可见性问题(CPU缓存)、原子性问题(线程切换)和有序性问题(编译优化) 需要分析是否存在线程安全问题的场景:存在共享数据且数据会发生变化,即有多个线程会同时读写同一个数据 针对该理论的解 ...
分类:
编程语言 时间:
2019-07-05 22:47:19
阅读次数:
239
本文在个人技术博客不同步发布,详情可用力戳亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩... 前两天发了工资,第一反应是想着要给远方的女朋友一点惊喜!于是打开了平安银行的APP给女朋友转点钱!填写上对方招商银行卡的卡号、开户名,一键转账!搞定!在我点击的那瞬间,就收到了ap ...
分类:
其他好文 时间:
2019-07-05 20:47:58
阅读次数:
161
前言 乐观锁和悲观锁问题,是出现频率比较高的面试题。本文将由浅入深,逐步介绍它们的基本概念、实现方式(含实例)、适用场景,以及可能遇到的面试官追问,希望能够帮助你打动面试官。 目录 一、基本概念二、实现方式(含实例)三、优缺点和适用场景四、面试官追问:乐观锁加锁吗?五、面试官追问:CAS有哪些缺点? ...
分类:
其他好文 时间:
2019-07-04 14:28:12
阅读次数:
86