Java 多线程以内存一致性错误

当不一样的线程针对相同的数据却读到了不一样的值时就发生了内存一致性错误。内存一致性错误的缘由是很是复杂的。幸运的是咱们程序员不须要详细的理解这些缘由,咱们须要作的事情就是使用策略来规避这些。程序员

避免内存一致性错误的关键就是须要先理解happens-before 关系。这个关系只是简单保证了一个肯定语句所写的内存对另一个肯定的语句来讲是可见的。为了更好的明白这个,来看看下面这个例子。假设一个简单的int是这样被定义和初始化:
int counter = 0;
counter能被线程A和B访问。假设线程A使变量增长:
counter++;
而后,线程B将它的值打印出来:
System.out.println(counter);
若是这两个语句在同一个线程中运行,那么可预见打印出来的值会是1,可是若是两个语句运行在不一样的线程中,那么打印出来的值多是0,由于没有办法保证线程A改变的counter值对线程B是可见的,除非咱们程序员可以确保这两个语句之间的关系是happens-beforeapp

有不少方法是实现happens-before。方法之一就是使用同步。线程

相关文章
相关标签/搜索