像之前我们说的 synchronized 这种独占锁属于悲观锁。什么是悲观锁呢?简单来说,它是在悲观的认为加锁的这个地方一定会发生冲突。除了悲观锁之后,还有乐观锁,乐观锁的含义就是我乐观的认为这个的地方不会发生冲突,如果没有发生冲突我就正常执行,如果发生了冲突,我就重试。 CAS(compare a ...
分类:
编程语言 时间:
2020-04-27 09:43:15
阅读次数:
65
悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传 统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写 锁等,都是在做操作之前先上锁。再比如 Java 里面的同步原语 synchroniz ...
分类:
其他好文 时间:
2020-04-25 00:42:12
阅读次数:
181
谈谈你对锁的理解? 在并发编程中有两个重要的概念:线程和锁 多线程是一把双刃剑,它在提高程序性能的同时,也带来了编码的复杂性。 锁的出现就是为了保障多线程在同时操作一组资源时的数据一致性,当我们给资源加上锁之后,只有拥有此锁的线程才能操作此资源,而其他线程只能排队等待使用此锁。 锁的分类 乐观锁和悲 ...
分类:
其他好文 时间:
2020-04-24 19:50:11
阅读次数:
58
一:CAS简介CAS:CompareAndSwap(字面意思是比较与交换),JUC包中大量使用到了CAS,比如我们的atomic包下的原子类就是基于CAS来实现。区别于悲观锁synchronized,CAS是乐观锁的一种实现,在某些场合使用它可以提高我们的并发性能。在CAS中,主要是涉及到三个操作数,所期盼的旧值、当前工作内存中的值、要更新的值,仅当所期盼的旧值等于当前值时,才会去更新新值。二:C
分类:
其他好文 时间:
2020-04-23 10:36:56
阅读次数:
61
乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用。1.乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类 ...
分类:
其他好文 时间:
2020-04-21 15:32:09
阅读次数:
64
# 一面 1. RAII底层原理,使用Java实现2. TCP讲一下,泛洪攻击讲一下怎么避免,TCP keepalive了解吗?3. 数据库隔离级别,不同隔离级别的现象解释一下。4. 数据库的锁机制5. 悲观锁、乐观锁讲一下6. 自旋锁互斥锁,适用于什么场景,自旋锁底层实现7. TCP的RST了解吗... ...
分类:
编程语言 时间:
2020-04-21 12:45:59
阅读次数:
84
# 一面1. JavaGC说说一下2. Java进线程说一下,为什么线程比进程资源调度快3. 悲观锁和乐观锁解释下4. TCP协议相关5. 用户输入URL后处理流程6. 滑动窗口解释下做什么用7. Redis数据结构,你平常常用什么结构,为什么读取速度快8. Redis主从复制,集群模式9. Rab... ...
分类:
编程语言 时间:
2020-04-21 12:42:37
阅读次数:
71
为什么要使用锁 加入甲乙同时下单购买商品A,下单前查询库存数量都是15,在下单的时候,甲下单更快,买走了10件。而乙下单时,还是以库存15来判断,这样就会出现数据错误。 在创建订单时候,假设有人和你同时对商品数量进行操作,要保证数据是安全的,可以使用乐观锁。在更新商品数量的时候,需要判断一下还是不是 ...
分类:
其他好文 时间:
2020-04-20 01:27:31
阅读次数:
140
悲观锁(Pessimistic Lock) 当我们要对一个数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库锁机制,在修改数据之前先锁定,再修改的方式被称之为悲观并发控制(是因为这是一种对数据的修改抱有悲观态度的并发控制方式。我们 ...
分类:
其他好文 时间:
2020-04-15 00:17:21
阅读次数:
62
1.插入测试数据 此时 _version 为 1 修改成功 此时 _version 为 2 http://192.168.1.200:9200/my_doc/_doc/10/_update if_seq_no与if_primary_term 模拟并发请求 从结果可以看出 kangxi222被更新成功 ...
分类:
其他好文 时间:
2020-04-12 18:58:52
阅读次数:
277