扒一扒@CallerSensitive注解,有点意思

本文探讨了并发编程中遇到的问题,重点解析了@CallerSensitive注解的作用和原理。通过示例,解释了Java中并非所有基础操作都是原子性的,引出了AtomicInteger等原子类的使用。此外,文章还讨论了如何限制jar包中某些类的使用,以及redis Lua命令在解决原子性问题上的应用。最后提到了线程安全的String类设计以及锁细粒度优化在并发容器中的实现。
摘要由CSDN通过智能技术生成

并发

什么时候 会有并发问题

原来入参为 0, 这时 CPU 01 刚刚加一变为为1, 而CPU 02 往内存中写入2,之后变为

本来应该为3

一句话 是因为 穿插执行导致的问题 (非原子性: 要么全都不执行,要么全都执行,在一个同一个事务中)

说到这 你会想到,原子性操作,那原子性操作有哪些?

原子性操作有哪些?

java 基础命令 比如赋值,一行基础代码 对么?

并不是,在Java中,32位或更小数量的读写保证是原子的。原子,意思是每个动作都在一个步骤中发生,不能被打断。因此,当我们有多线程应用程序时,读写操作是线程安全的,不需要进行同步。

比如 i++ 这种一行的基础代码 里面分为几步执行,也不能保证 原子性

既然i++ 不是原子性,那有原子性操作么?

有,AtomicInteger 就是原子类,那怎么证明他的操作是原子的,怎么保证的原子呢

有的时候 我想 让jar包中的类 不给业务系统使用,我怎么办?

有的时候 我们写jar包的组件,希望业务系统 引用了我们的jar ,但是别使用某个类(这里叫A类),A类 只是给我们自己组件用的。

Unsafe 类就是这样,我们在外部使用的时候提示,在rt.jar 中

  1. 先调用 public native int getIntVolatile(Object o, long offset); 获取当前的内存中的 旧值 (
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值