并发
什么时候 会有并发问题
原来入参为 0, 这时 CPU 01 刚刚加一变为为1, 而CPU 02 往内存中写入2,之后变为
本来应该为3
一句话 是因为 穿插执行导致的问题 (非原子性: 要么全都不执行,要么全都执行,在一个同一个事务中)
说到这 你会想到,原子性操作,那原子性操作有哪些?
原子性操作有哪些?
java 基础命令 比如赋值,一行基础代码 对么?
并不是,在Java中,32位或更小数量的读写保证是原子的。原子,意思是每个动作都在一个步骤中发生,不能被打断。因此,当我们有多线程应用程序时,读写操作是线程安全的,不需要进行同步。
比如 i++ 这种一行的基础代码 里面分为几步执行,也不能保证 原子性
既然i++ 不是原子性,那有原子性操作么?
有,AtomicInteger 就是原子类,那怎么证明他的操作是原子的,怎么保证的原子呢?
有的时候 我想 让jar包中的类 不给业务系统使用,我怎么办?
有的时候 我们写jar包的组件,希望业务系统 引用了我们的jar ,但是别使用某个类(这里叫A类),A类 只是给我们自己组件用的。
Unsafe 类就是这样,我们在外部使用的时候提示,在rt.jar 中
- 先调用 public native int getIntVolatile(Object o, long offset); 获取当前的内存中的 旧值 (