- 博客(14)
- 问答 (2)
- 收藏
- 关注
原创 Juc之无锁并发
线程1获取余额的值为100,此时减少10为90,此时线程2修改为80,此时线程1去修改的时候会先用100,与最新的结果进行对比,100和80不相等此时修改失败,这样的拿到原值和最新的原值比较是否相等相等修改成功否则继续循环获取再次尝试修改。ABA问题,主线程无法感知到对共享变量的修改比如刚开始为A,主线程要改成C,刚开始主线程获取A,但是在这之间可能有其他线程将A修改为M再由M修改为A,此时主线程对比值还是一样的还是能修改成功但是无法感知之间的变化。实现了对数组的原子性操作。
2024-04-18 12:19:09
235
1
原创 JMM之有序性,可见性,原子性,之volatile关键字
问题可能是线程1进入到代码块,创建对象的时候一般流程是先开辟空间执行对象构造方法给引用赋值,但是如果反过来,先给引用赋值,再执行构造方法,此时其他线程可能,直接返回没有执行完构造方法的对象造成程序错乱。volatile关键字只能解决可见性的问题不能解决多线程并发的问题(原子性),synchroized可以解决。此时会对变量的写操作之前添加写屏障,防止,执行构造方法的指令跑到赋值操作之后解决了指令重排问题。正常情况下是先执行构造方法(创建对象),再对引用赋值,经过指令重排可能出现相反的情况。
2024-04-17 16:04:58
206
原创 Juc之StampedLock,Semaphore,CycliBarrier
Juc之StampedLock,Semaphore,CycliBarrier
2024-04-16 17:01:42
139
原创 Juc之ReentrantReadLock
内部分别使用读锁保护数据的read方法写锁保护数据的write方法。区别与之前的是state的值的不同写锁低16位读锁高16位。当读操作远远高于写操作时,这时候使用。
2024-04-16 16:06:12
175
原创 Redis分布式锁
获取锁:互斥:确保只能有一个线程获取锁非阻塞:尝试一次,成功返回true,失败返回false释放锁:手动释放超时释放:获取锁时添加一个超时时间。
2024-04-13 18:55:31
825
平面点距离的升序排列
2022-03-13
acm提交平台交不上去,显示错误但自己测试没问题
2022-03-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人