synchronized
1 原子性 有序性 可见性 1 原子性 数据库的事物 ACID
A 原子性 事务是一个最小的执行单位 一次事物的多次操作要么都成功 要么都失败
并发编程的原子性:一个或多个指令在CPU执行过程中不允许中断的
i++; 不是原子性 一共有三个指令
getfield 指令是cpu 需要将i从内存拉取到cpu上
iadd 是在cpu寄存器内部执行的
putfield cpu执行完后 放到内存中
如何保证i++是原子性的?
sychronized,lock,Atomic(CAS)


使用lock 锁也会有类似的效果
在使用sychronized和lock锁时 可能会触发将线程挂起的操作 而这种操作会触发内核态和用户态的切换 从而导致消耗资源
CAS方式就相对于synchronized和lock 锁的效率更高 因为CAS不会触发线程挂起的操作 CAS compare and swap
比如说在主内存中有个数据i=1 如果要执行i++
首先要将i的值取出 然后将它改成2 在修改内存值之前 会先比较主内存的值是1吗? 如果是1 那么就把主内存的值替换为2 如果不是1 那么放弃这次修改
(先比较后修改内存中的数据)


浙公网安备 33010602011771号