JUC-happens-before先行发生原则
2021/10/6 23:11:22
本文主要是介绍JUC-happens-before先行发生原则,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在JMM中,如果一个操作执行的结果需要对另一个操作可见性,或者代码重排序,那么这两个操作之间必须存在happens-before关系。
总原则:
1、如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。
2、两个操作之间存在happens-before关系,并不意味着一定要按照happens-before原则制定的顺序来执行。如果重排序之后的执行结果已按照happens-before关系来执行的结果一致,那么这种重排序是可以的。
happens-before包含可见性和有序性的约束
happens-before八条原则
1、次序原则:一个线程内,按照代码顺序,写在前面的操作先行发生于写在后面的操作,前一个操作的结果可以被后一个操作获取
2、锁定原则:一个unlock操作先行发生于后面第同一个锁的lock操作。上一个操作unlock了,下一个线程才能获得锁进行lock
3、volatile变量规则:对一个volatile变量的写操作先行发生于后面对这个变量的读操作,前面的写对后面的读是可见的。这里的后面指时间上的先后
4、传递原则:如果A操作先行发生于B操作,B操作先行发生于C操作,则可以得出A操作先行发生于C操作
5、线程启动规则:Thread对象的start()方法先行发生于此线程的每一个动作
6、线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生;可以通过Thread.interrupted()检测到是否发生中断
7、线程终止规则:线程中的所有操作都先行发生于对此线程的终止检测,我们可以通过Thread.join()、Thread.isAlive()等方法检测线程是否已经终止执行
8、对象终结规则:一个对象的初始化完成先行发生于它的finalize()方法
案例
解答
这篇关于JUC-happens-before先行发生原则的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11国产医疗级心电ECG采集处理模块
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南