zoukankan      html  css  js  c++  java
  • 可见性 原子性

    原子操作:要么发生,要么不发生,不可被分割的
    java的内存模式堆内存(主内存)是共享的,但是线程的栈内存是私有的,会拷贝主内存下来通过read,write,store,load(4个原子操作)
    不可见,比如A线程改了,还没通知修改主内存,B线程不可见,虽然4个都是原子操作,但是多个步骤就不是了
    加上volatile才会有可见性,不会被重排序,因为不可缓存,直接修改主内存,B线程就可见了,java-client好像没事,不加volatile java-server模式启动可能出现重排序,因为编译会进行优化
    在单线程是有序的符合先行的可能被重排序以至于优化
    java-server模式启动慢运行快,java-client启动快运行慢
    volatile只能保证可见,和重排序,多线程还是可能不正确
    使用volatile比如a=1这种只是赋值一个常量,不会作为变量在右边,因为a=b这种不是原子的
    要原子操作可以用AtomicInteger类或者给变量或块或方法加锁,临界区等

  • 相关阅读:
    Golang相关环境变量
    mac catalina关闭系统更新提示
    Git常用命令
    UDP打洞原理
    LANMP相关配置
    Windows平台编译libevent
    Sublime text2 + cygwin编译C++
    C++的指针常量和常量指针
    C++的new和delete
    C/C++产生随机数
  • 原文地址:https://www.cnblogs.com/HaibaraAi/p/6534623.html
Copyright © 2011-2022 走看看