锁
文章平均质量分 91
锁
Abner G
怀揣“空杯”,期待满载而归
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【锁】synchronized(源码c++)
本来是在写面霸系列的,写着写着就写到了这一题:而关于 Synchronized 我去年还专门翻阅 JVM HotSpot 1.8 的源码来研究了一波,那时候我就发现有一个点,一个几乎网上所有文章包括《Java并发编程的艺术》也是这样说的一个点。锁升级想必网上有太多文章说过了,这里提到当轻量级锁 CAS 失败,则当前线程会尝试使用自旋来获取锁。其实起初我也是这样认为的,毕竟都是这样说的,而且也很有道理。因为重量级锁会阻塞线程,所以如果加锁的代码执行的非常快,那么稍微自旋一会儿其他线程就不需要锁了,就可以直接转载 2022-07-14 01:42:03 · 1807 阅读 · 0 评论 -
【锁】synchronized 锁升级
在Java中,锁可能是我们最早接触的锁了,在 JDK1.5之前synchronized是一个重量级锁,相对于juc包中的Lock,比较笨重。 修饰实例方法,反编译之后查看加锁前后对比;在加锁之后,常量池中多了ACC_SYNCHRONIZED标示符; 修饰代码块,反编译之后查看加锁前后对比;加锁之后多了,三条指令;monitor对象:监视器锁,每个对象都存在着一个 monitor 与之关联。在Java虚拟机(HotSpot)中,monitor是由ObjectMonitor实现; 线程通过 CAS尝试获取锁,如原创 2022-07-14 01:14:29 · 958 阅读 · 0 评论 -
【锁】悲观锁与乐观锁实现
锁:在程序中一种保证数据安全的手段和机制。在并发处理共享资源时,可以对共享变量使用关键字。多用户修改表中同一数据时,可以给该行数据上锁保证数据安全。乐观锁和悲观锁,可以理解为因为一种态度,一种思想定义的一类锁。 如图使用的方式,保守的保证了数据的安全。两个线程同时去修改id 为1的同一行数据为例,实现悲观锁。 如果事务等待获取排他锁的时间超过LockTimeout ,则将抛出LockTimeoutException ,而不会将该事务标记为已回滚;死锁处理:悲观锁会增加死锁的可能性,其中两个(或更多)事务各原创 2022-06-28 01:44:59 · 700 阅读 · 0 评论 -
【锁】CAS(Compare And Swap)
【锁】悲观锁与乐观锁实现,中乐观锁,使用的是CAS算法。CAS(Compare And Set 或 Compare And Swap),即比较并修改的意思。CAS技术可以保证操作的原子性,atomic包下的原子类都是基于CAS和volatile实现原子操作的。 【Atomic】—JDK 原子计数器AtomicInteger(源码)对java 使用CAS源码进行了分析,从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compare原创 2022-06-28 23:29:53 · 665 阅读 · 0 评论
分享