JVM内存模型
JMM内存模型(java线程内存模型)
JMM-同步八种操作介绍(1) lock(锁定) :作用于主内存的变量,把一个变量标记为一条线程独占状态 (2) unlock(解锁) :作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后 的变量才可以被其他线程锁定 (3) read(读取) :作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存 中,以便随后的load动作使用 (4) load(载入) :作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工 作内存的变量副本中 (5) use(使用) :作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎 (6) assign(赋值) :作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内 存的变量 (7) store(存储) :作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存 中,以便随后的write的操作 (8) write(写入) :作用于工作内存的变量,它把store操作从工作内存中的一个变量的值 传送到主内存的变量中
并发编程的可见性,原子性与有序性问题
可见性:
volatile关键字保证可见性。当一个共享变量被volatile修饰时,它会保证修改的值立即 被其他的线程看到,即修改的值立即更新到主存中,当其他线程需要读取时,它会去内存中 读取新值。 MESI缓存一致性原理 有序性:眼见不一定为真 (可以使用volatile关键字)涉及到指令重排(不太懂)原子性:
除了JVM自身提供的对基本数据类型读写操作的原子性外,可以通过 synchronized 和 Lock 实现原子性。因为synchronized和Lock能够保证任一时刻只有一个线程访问该代码 块
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。