1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-07-28 12:22:17 +08:00

Compare commits

...

3 Commits

Author SHA1 Message Date
guide
a4f84bf7a1 [docs add]添加在线支付相关开源项目 2022-03-26 18:36:56 +08:00
Guide
7d34a6c1a9
Merge pull request #1627 from BaoPiao/patch-1
AtomicMarkableReference 可以解决ABA问题
2022-03-26 18:05:31 +08:00
BaoPiao
ea1b70d703
AtomicMarkableReference 是可以解决ABA问题的
因为AtomicMarkableReference是通过内部类Pair实现数据存储,每次替换都是通过Pair.of方法new一个类出来进行替换原先的值
如果ABA出现,那么最后的A肯定是一个新的Pair实例,即当前的A和之前的A不是同一个实例,当现场使用compareAndSet则会返回false
以下是compareAndSet的实现:
Pair<V> current = pair;
        return
            expectedReference == current.reference &&
            expectedMark == current.mark &&
            ((newReference == current.reference &&
              newMark == current.mark) ||
             casPair(current, Pair.of(newReference, newMark)));
2022-03-19 17:19:59 +08:00
2 changed files with 7 additions and 1 deletions

View File

@ -37,7 +37,7 @@ Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是
**引用类型**
- AtomicReference引用类型原子类
- AtomicMarkableReference原子更新带有标记的引用类型。该类将 boolean 标记与引用关联起来,~~也可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。~~
- AtomicMarkableReference原子更新带有标记的引用类型。该类将 boolean 标记与引用关联起来,也可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。
- AtomicStampedReference :原子更新带有版本号的引用类型。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。
**对象的属性修改类型**

View File

@ -38,6 +38,12 @@ category: 开源项目
- **[AJ-Captcha](https://gitee.com/anji-plus/captcha)** :行为验证码(滑动拼图、点选文字),前后端(java)交互。
- **[tianai-captcha](https://gitee.com/tianai/tianai-captcha)** :好看又好用的滑块验证码。
## 在线支付
- **[jeepay](https://gitee.com/jeequan/jeepay)** :一套适合互联网企业使用的开源支付系统,已实现交易、退款、转账、分账等接口,支持服务商特约商户和普通商户接口。已对接微信,支付宝,云闪付官方接口,支持聚合码支付。
- **[YunGouOS-PAY-SDK](https://gitee.com/YunGouOS/YunGouOS-PAY-SDK)** YunGouOS 微信支付接口、微信官方个人支付接口、非二维码收款,非第四方清算。个人用户可提交资料开通微信支付商户,完成对接。
- **[IJPay](https://gitee.com/javen205/IJPay)** 聚合支付IJPay 让支付触手可及封装了微信支付、QQ 支付、支付宝支付、京东支付、银联支付、PayPal 支付等常用的支付方式以及各种常用的接口。
## 其他
- **[oshi](https://github.com/oshi/oshi "oshi")** :一款为 Java 语言提供的基于 JNA 的(本机)操作系统和硬件信息库。