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类或者给变量或块或方法加锁,临界区等

  • 相关阅读:
    shell awk
    spl_autoload_register array参数
    install xdebug on fedora
    call_user_func
    转载 shell sort
    通过nginx + lua来统计nginx上的监控网络请求和性能
    nginx 知识点
    python 发送带附件的 邮件
    xdebug php
    关于ZendStudio 10.5的破解
  • 原文地址:https://www.cnblogs.com/HaibaraAi/p/6534623.html
Copyright © 2011-2022 走看看