Tag: 内存可见性

为什么这个简单的线程程序会卡住?

看看这个简单的Java程序: import java.lang.*; class A { static boolean done; public static void main(String args[]) { done = false; new Thread() { public void run() { try { Thread.sleep(1000); // dummy work load } catch (Exception e) { done = true; } done = true; } }.start(); while (!done); System.out.println(“bye”); } } 在一台机器上,它打印“再见”并立即退出,而在另一台机器上,它不打印任何东西并永远坐在那里。 为什么?

易变量和其他变量

以下是来自经典Concurency in Practice : 当线程A写入volatile变量并且随后线程B读取相同的变量时,在写入volatile变量之前A可见的所有变量的值在读取volatile变量后变为B可见。 我不确定我是否真的能理解这句话。 例如,在这种情况下所有变量的含义是什么? 这是否意味着使用volatile也会对非易失性变量的使用产生副作用? 在我看来,这句话有一些我无法理解的微妙含义。 有帮助吗?