首先,您的程序是 线程不安全的, 因为它
boolean started是一个 共享变量 ,但是
volatile在同步块中既不访问也不访问。
现在,偶然地
PrintStream#print是一种同步方法,并且在任何实际架构上,使用 内存屏障
CPU指令来实现进入和退出同步块,这会导致线程本地状态与主内存之间的完全同步。
因此, 纯属偶然 ,添加
started一个线程(EDT)对标志的设置对另一线程(主线程)可见。

首先,您的程序是 线程不安全的, 因为它
boolean started是一个 共享变量 ,但是
volatile在同步块中既不访问也不访问。
现在,偶然地
PrintStream#print是一种同步方法,并且在任何实际架构上,使用 内存屏障
因此, 纯属偶然 ,添加
started一个线程(EDT)对标志的设置对另一线程(主线程)可见。