内存一致性错误(Memory Consistency Errors)
来源:互联网 发布:js常见设计模式 编辑:程序博客网 时间:2024/06/04 18:08
内存一致性错误发生在当不同的线程本对相同数据有不一致的视角。造成内存一致性错误的原因很复杂,不在本教程的范围之内。幸运的是,程序员不需要了解造成这个问题的详细原因,所需要的是一个策略来避免它们的发生。
避免内存一致性错误发生的关键是理解现行发生关系。这个关系是一个简单的保证,内存被一个操作时,对另外一个操作是可见的。为了证明这个,设计如下一个例子,假设定义一个简单int类型字段并初始化:
int counter = 0;
变量counter被两个线程共享,A和B,假设线程A对counter自增:
counter++;
同时,紧随其后,线程B打印出变量counter:
System.out.println(counter);
要是两个语句是在同一个线程中被执行的,那结果是安全的,被打印出来的值就是1.但是,如果这两个语句在不同的线程中执行,那打印出来的值将可能是0,因为不能保证线程A对counter的改变对线程B是可见的,除非程序员已经在这两个语句中将现行发生关系建立起来。
有多种方式创建现行发生关系。其中一种方式是使用synchronization,我们将会在接下来的下一节中看到。
我们已经看过两种方式创建现行发生关系。
当一个语句调用Thread.start,每个和这个语句有现行发生关系的语句同样和被新线程执行的语句有现行发生关系。这代码的结果是新创建的线程对新线程是可见的。
当一个线程终止并且引发一个Thread.join发生在另外一个线程的返回,那么,所有被终止线程执行的语句和所有成功join的语句是有现行发生关系的,这代码的结果是线程执行join对另外一个线程是可见的。
如期望了解创建现行发生关系的方法有哪些,请查阅
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/package-summary.html#MemoryVisibility
- 内存一致性错误(Memory Consistency Errors)
- The Java™ Tutorials — Concurrency :Memory Consistency Errors 内存一致性错误
- 内存一致性(Memory Consistency) 资料整理
- 内存一致性模型(Memory Consistency Models)
- Memory Consistency Models -- 内存一致性模型
- 内存一致性模型(Memory Consistency Models)
- 内存一致性模型(Memory Consistency Models)
- Memory Consistency Model 内存一致性模型
- 内存一致性模型(Memory Consistency Models)
- Memory Consistency Errors
- 内存一致性中的release consistency
- Memory Consistency and Cache Coherence——内存连贯性和cache一致性 (1)
- 非易失内存NVM一致性(Consistency)问题研究(1)
- 非易失内存NVM一致性(Consistency)问题研究(2)
- Using valgrind to detect memory errors使用valgrind检测内存错误
- 存储一致性模型研究——Research of Memory Consistency Model
- 存储一致性模型研究——Research of Memory Consistency Model
- c++ & Memory consistency model
- TOJ 3601.Longest Contiguous Subsequence 最长连续公共子序列
- Android跨进程通信的四种方式
- ViewPager图片自动+手动左右无限轮播
- 如何利用Charles抓取app中的数据
- 非常详细的标准C的标记化结构初始化语法说明
- 内存一致性错误(Memory Consistency Errors)
- scikit-learn : GBR (Gradient boosting regression)
- 如何利用运行时给系统分类添加一个属性?
- 【工具安装】-CentOS源码安装php5.6
- 关于YYModel的使用以及与MJExtension的一些比较
- java web2
- 网络视频监控系统开发系列------视频监控系统的发展历史
- 资料
- Java中的ClassLoader 动态加载机制