Li *_*lei 7 java multithreading volatile
我正在阅读有关Java Volatile关键字的文章,遇到了一些问题。点击这里
public class MyClass {
private int years;
private int months
private volatile int days;
public void update(int years, int months, int days){
this.years = years;
this.months = months;
this.days = days;
}
}
Run Code Online (Sandbox Code Playgroud)
udpate()方法写入三个变量,其中只有几天是可变的。
完全易失的可见性保证意味着,当将值写入天时,线程可见的所有变量也将写入主存储器。这意味着,当将值写入天时,年和月的值也将写入主存储器。
那么,“线程可见的所有变量”是什么意思?这是否意味着线程堆栈中的所有变量?“线程可见”是什么意思?我如何知道该线程可以看到几个月和几年?
这种关系只是保证一个特定语句写入的内存对另一个特定语句可见。
在同一个线程中,
this.years = years;
this.months = months;
Run Code Online (Sandbox Code Playgroud)
happens-before:
this.days = days;
Run Code Online (Sandbox Code Playgroud)happens-before的读者线程读取volatile
变量。并且,happens-before关系具有传递性。当读取线程看到 volatile 变量的新鲜值时days,它也可以读取yearsand的新鲜值months。
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |