JUC并发编程
当年拼却醉颜红
这个作者很懒,什么都没留下…
展开
-
并发安全问题之--事物失效问题
不过,reduceStock()方法的事务传播行为是REQUIRES_NEW,这会导致在进入reduceStock()方法时会创建一个新的事务,可以成为子事务。Spring的事务管理默认感知的异常类型是RuntimeException,当事务方法内部抛出了一个IOException时,不会被Spring捕获,因此就不会触发事务回滚,事务就失效了。事物默认的传播行为是REQUIRES类型,内外事物都是REQUIRES类型就会合并事物,而内部事物如果使用了REQUIRES_NEW就会开启一个新事物,原创 2023-11-12 23:55:05 · 356 阅读 · 0 评论 -
并发安全问题之--锁失效和锁边界问题
一、synchronized加锁的范围是this,加在方法上作用范围就是整个对象,那范围就大了,整个对象都变成单线程了,故把synchronized加在变量userId上,缩小锁的范围,另外就是String类型要加锁得用字符串常量池中的对象来比较,这样才是一个对象,否则每一个请求来拿到的都是一个新的字符串对象,就锁不住。这是一个典型的案例:业务流程为先查询数据条数,然后再判断条数超没超限制,没超限制就新增数据。原创 2023-11-04 15:04:12 · 232 阅读 · 0 评论 -
并发安全问题之超卖问题
优点:不加锁性能好。缺点:同时请求成功率低(即只要发现数据变了就放弃了)。乐观锁思想的具体体现:一共两步,第一步,先查询状态。第二步,再更新数据时必须where等于前面的状态,确保数据没有改变。第二步集查询和操作数据于一身具有原子性。原创 2023-10-29 23:49:13 · 112 阅读 · 0 评论 -
锁降级 ReentrantReadWriteLock
所谓降级,可以通过一个例子理解,一般都是写的权限大,读的权限小,从写到读自然是降级,这是通俗的理解。锁降级:同一个线程先获取写锁,在写锁未释放的情况下,再获取读锁,之后释放写锁,锁降级为读锁。锁降级是为了让当前线程感知到数据的变化,目的是保证数据可见性。即为同一个线程写完之后可以立即看到写入的情况,也交写后读。源码总结–锁降级机制专门为缓存设计。不同线程间读写是互斥的。原创 2023-10-08 23:56:05 · 494 阅读 · 0 评论 -
AQS内部的体系架构
AQS本质上是一个双向队列,加一个状态位state。内部靠Node节点形成队列。AQS由state和CLH变体的虚拟双端队列组成。AQS的内部类Node类。原创 2023-10-08 23:54:04 · 442 阅读 · 0 评论 -
邮戳锁StampedLock
StampedLock类的乐观读锁闪亮登场,通过版本号控制。StampedLock不可重入。二、邮戳锁由锁饥饿问题引出。三、邮戳锁特点与缺点。原创 2023-09-30 13:37:59 · 313 阅读 · 0 评论