voliate内存屏蔽性

迷南。 2022-12-16 09:08 190阅读 0赞

java 线程内存模型

1、线程有线帧,当线程启动的时候将变量缓存到线帧,各个线程之间不同步。这就是内存屏蔽性
2、voliate可以破除内存屏蔽性,但是并不保证线程安全

3、多个线程都在内部加载了被voliate修饰的变量,在汇编的时候自动给该字段添加lock的值
4、当线程A对该字段改动的时候,会给总内存发送store消息,主内存会给所有引用该字段的线程发送lock指令,
A修改完会立即writer到主内存,释放锁,并将所有引用的线程(BCD等)针对该字段设置为无效
5、别的线程如果用到这个字段,如果是lock 的时候则会等待,基于总线嗅探技术,会实时监控主内存,由于被无效,就会去
load新值
6、如果多个线程都去修改该字段,则让主内存进行排序,选定一个线程去修改,别的等待

内存赋值速度很快,所以加锁操作对内存影响不太大,MESI协议

sync 基于C++实现的同步机制,1.6后sync进行大量优化

推荐aqs,基于java 实现

发表评论

表情:
评论列表 (有 0 条评论,190人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JVM 内存可见

    JVM(Java虚拟机)中的内存可见性是指不同线程之间对内存中数据的访问是同步的。当一个线程修改了某个内存区域的数据,其他线程能够立即看到这些变化。这种内存可见性保证了多线程环

    相关 多线程 - voliate

    volatile 关键字可以保证可见性和有序性,但是不能保证原子性。 在Java中,多个线程之间共享变量的值可能存在缓存不一致的问题,例如一个线程修改了变量的值,但是其他

    相关 多线程 - voliate 关键字

    介绍 volatile 是 Java 中的关键字,用于修饰变量。它的作用是强制对被修饰的变量的写操作立即刷新到主存中,并强制对该变量的读操作从主存中读取最新的值,而不是使

    相关 voliate内存屏蔽

    java 线程内存模型 1、线程有线帧,当线程启动的时候将变量缓存到线帧,各个线程之间不同步。这就是内存屏蔽性 2、voliate可以破除内存屏蔽性,但是并不保证线程

    相关 Java - 内存可见

    什么是可见性? 可见性: 一个线程对共享变量值的修改,能够被其他线程看到。那我们就认为这个共享变量在这些线程之间是可见的。 什么是共享变量? 共享变量: 如果一个