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 那么放弃这次修改
(先比较后修改内存中的数据)



 

posted @ 2022-05-12 23:21  花心大萝卜li  阅读(36)  评论(0)    收藏  举报