volatile 的作用就是把放在线程栈上的变量立刻同步到主内存中,这里涉及到Java内存模型的知识。 每一个运行在Java虚拟机里的线程都拥有自己的线程栈。这个线程栈包含了这个线程调用的方法当前执行点相关的信息。一个线程仅能访问自己的线程栈。一个线程创建的本地变量对其它线程不可见,仅自己可见。即使两个线程执行同样的代码,这两个线程任然在在自己的线程栈中的代码来创建本地变量。因此,每个线程拥有每个本地变量的独有版本。 所有原始类型的本地变量都存放在线程栈上,因此对其它线程不可见。一个线程可能向另一个线程传递一个原始类型变量的拷贝,但是它不能共享这个原始类型变量自身。 多个线程间变量的同步都是先同步到主内存中,然后主内存再同步到其他线程的变量副本上,但无法保证同步是立刻执行的,加volatile之后会立刻同步。 在本文中的作用就是当一个线程修改了shutdownRequested之后,其他线程获取再次获取shutdownRequested的值就是最新的,也就是达到了立刻停止doWork。
volatile 的作用就是把放在线程栈上的变量立刻同步到主内存中,这里涉及到Java内存模型的知识。
多个线程间变量的同步都是先同步到主内存中,然后主内存再同步到其他线程的变量副本上,但无法保证同步是立刻执行的,加volatile之后会立刻同步。
在本文中的作用就是当一个线程修改了shutdownRequested之后,其他线程获取再次获取shutdownRequested的值就是最新的,也就是达到了立刻停止doWork。