JMM和synchronize的一些记录:
来源:互联网 发布:minecraft java版 编辑:程序博客网 时间:2024/04/30 22:43
内存模型:可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。
Java内存模型:JMM决定一个线程对共享变量的写入何时对另一个线程可见,从抽象的角度来上看,JMM定义了线程和主内存之间的抽象关系。线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,保存了该线程使用到的共享变量副本,本地内存是一个抽象的概念,并不是真实存在。
Happens-before:先行发生原则是JMM种最核心的概念,它阐述了两个操作之间内存的可见性。假设A先行发生于B,那么操作A产生的影操作结果能别B观察到,但没有意味着A一定要在B之前发生。
先行发生原则具体:程序次序规则、管程锁定规则、volatile规则、线程启动规则、线程终止规则、线程中断规则、对象终结规则、传递性
Synchronize的底层实现:synchronized关键字被javac编译成字节码的时候,会在同步块的入口位置和退出位置分别插入monitorenter和monitorexit字节码指令,这两个字节码都需要为其指定一个锁对象,当线程执行到monitorenter指令时将会尝试获取对象对应的moniter所有权。如果该对象没被锁定或是该线程已经拥有的该对象的锁,将锁的计数器加1,当计数器为0是锁被释放,同样,当执行monitorexit指令时,把锁的计数器减1.
Synchronize的语义:当线程释放锁时,JMM会把该线程的本地内存中的共享变量刷新到主内存中;当线程获得锁时,JMM会把线程对应的本地内存的置为无效,从而是被监视器保护的代码须从住内存中读取共享变量的值。
1 0
- JMM和synchronize的一些记录:
- JMM的一些总结
- java的 violate 和 synchronize
- 关于jmm的一些拙见(1)
- Synchronize 和 Lock 的区别与用法
- Java ReentrantLock和synchronize的对比
- Synchronize 和 volitile 的区别(1)
- java的锁,synchronize和lock
- Synchronize 、 Lock和volatile的区别
- 【心得】并发(synchronize)和并行的区别
- Synchronize,Lock和volatile的区别
- Delphi中多线程同步过程Synchronize的一些说明
- 多线程运行同步锁synchronize的一些实战心得
- java 中volatile和synchronize的区别和比较
- synchronize和ReentrantLock
- JMM的原创
- JMM的意义
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 统计分析基础 (一) 数据统计与图表
- u-boot-2016.5启动流程
- AppleScirpt设置打开Terminal快捷键
- C++ 常用泛型算法的使用
- 多图详解Spring框架的设计理念与设计模式
- JMM和synchronize的一些记录:
- JVM内存区域介绍
- 软件测试的一些理解
- Android基础(三)
- Leetcode 234. Palindrome Linked List (Easy) (cpp)
- Integer to English Words
- 关于解决git冲突
- jQuery学习<一> — — 安装
- KMP模板