少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述happen-before 规则相关的知识,希望能为你提供帮助。
目录
- 由来
- 内容
- 编译器和处理器:希望内存模型对于它们的束缚越少越好,从而做尽可能多的优化来提高性能。
- 程序员:希望内存模型易于理解。
happen-before 规则不仅为程序员提供足够强内存可见性保证,而且容易理解,让程序员不需要学习重排序就可以进行多线程编程。
内容
- 程序顺序规则:一个线程中的每个操作,happen-before 于该线程中的任意后续操作。
- 锁规则:对一个锁的解锁操作,happen-before 于对随后这个锁的加锁操作。
- volatile 变量规则:对于一个 volatile 域的写,happen-before 于后续对这个 volatile 域的读。
- 传递性:如果 A heppen-before B,B heppen-before C,那么 A heppen-before C。
- 线程启动规则:线程对象的 start 方法 heppen-before 于该线程内的任意操作。
- 线程结束规则:线程中的任何操作一定 heppen-before 于其他线程检测到该线程结束。
- 线程中断规则:线程的 interrupt 方法 happen-before 于被中断线程的代码检测到中断事件的发生。
- 对象终结规则:一个对象的初始化完成 happen-before 于 finalize 方法的开始。
A happen-before B,要求操作 A 的执行结果对操作 B 可见,且在程序顺序上操作 A 排在操作 B 前面。
Java 内存模型让程序员认为在执行顺序上操作 A 同样排在操作 B 前面,无需担心重排序的影响。
【happen-before 规则】但是实际上只要《重排序》不影响程序的执行结果,也是允许的,这就是上文所说的平衡点。
推荐阅读
- Android的10款最佳格斗赛车游戏下载推荐合集(哪个最好玩())
- Visual Studio中xml文件使用app.configweb.config等的智能提示的方法
- app常见测试点
- android -------- Data Binding的使用RecyclerView
- 对工程测量大师App的评价
- MyBatis 学习记录3 MapperMethod类
- App installation failed This application does not support this device’s CPU type.
- 函数对象的call()apply() 方法区别
- Android各版本特性