我对变量从“主”内存有效访问变量有点困惑。它与具有本地副本的变量(非易失性)有什么不同?当多个线程访问非易失性 vs 一个volatile变量时,典型的工作流程是什么?我的意思是他们如何在幕后工作?
答案 0 :(得分:5)
假设您有一个可由多个线程访问的变量。
线程1查看变量。因为查看共享内存比线程本地内存更昂贵,所以它会复制变量。 (请注意,不会复制对象,只会复制它。)
线程2查看相同的变量。它决定改变变量。但线程1不知道它!线程1仍在使用陈旧数据。这是一件非常糟糕的事情。通过使它volatile
,每个线程在访问它时必须查看原始变量。他们不允许制作本地副本,因此不会过时。