分析 Java 并发下的乐观锁
聊完原子操纵了,我们进入正题。 各人都知道,一样平常而言,因为多线程并发会导致安详题目,针对变量的读和写操纵,城市回收锁的机制。锁一样平常会分为乐观锁和气馁锁两种。 气馁锁 对付气馁锁,开拓者以为数据发送时产生并发斗嘴的概率很大,以是每次举办读操纵前城市上锁。 乐观锁 对付乐观锁,开拓者以为数据发送时产生并发斗嘴的概率不大,以是读操纵前不上锁。 到了写操纵时才会举办判定,数据在此时代是否被其他线程修改。假如产生修改,那就返回写入失败;假如没有被修改,那就执行修改操纵,返回修改乐成。 乐观锁一样平常都回收 Compare And Swap(CAS)算法举办实现。顾名思义,该算法涉及到了两个操纵,较量(Compare)和互换(Swap)。 CAS 算法的思绪如下: 该算法以为差异线程对变量的操纵时发生竞争的环境较量少。 该算法的焦点是对当前读取变量值 E 和内存中的变量旧值 V 举办较量。 假如相称,就代表其他线程没有对该变量举办修改,就将变量值更新为新值 N。 假如不等,就以为在读取值 E 到较量阶段,有其他线程对变量举办过修改,不举办任何操纵。 当线程运行 CAS 算法时,该运行进程是原子操纵,也就是说,Compare And Swap 这个进程固然涉及逻辑较量繁冗,但详细操纵趁热打铁。 Java中 CAS 的底层 实现Java 中的 Unsafe 类我先问各人一个题目: 什么是指针? 针对学过 C、C++ 说话的同窗想必都不生疏。说白了,指针就是内存地点,指针变量也就是用来存放内存地点的变量。 但对付指针这个对象的行使,有利有弊。有利的处地址于假如我们有了内存的偏移量,换句话说有了数据在内存中的存储位置坐标,就可以直接针对内存的变量操纵; 破绽就在于指针是说话中成果强盛的组件,假如一个新手在编程时,没有思量指针的安详性,错误的操纵指针把某块不应修改的内存值修改,轻易导致整个措施瓦解。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |