我一直在用一个流行的例子来试验Java线程可见性问题,这个例子通过一个共享的布尔值和非易失性变量向线程发送一个停止信号,而目标线程似乎没有得到它),如下所示:
public class ThreadVisibilityTest但是然后我意识到,如果我将stopped变量设置为non volatile,而不是在目标线程的synchronized上下文中访问它,目标线程将获得最终值并停止。System.out.println("Target thread gets signal and stops...")