[Java]这个boolean用volatile修饰有什么意义?

用和不用的区别在哪儿?

图片描述

阅读 4.1k
2 个回答

volatile 的作用就是把放在线程栈上的变量立刻同步到主内存中,这里涉及到Java内存模型的知识。

每一个运行在Java虚拟机里的线程都拥有自己的线程栈。这个线程栈包含了这个线程调用的方法当前执行点相关的信息。一个线程仅能访问自己的线程栈。一个线程创建的本地变量对其它线程不可见,仅自己可见。即使两个线程执行同样的代码,这两个线程任然在在自己的线程栈中的代码来创建本地变量。因此,每个线程拥有每个本地变量的独有版本。

所有原始类型的本地变量都存放在线程栈上,因此对其它线程不可见。一个线程可能向另一个线程传递一个原始类型变量的拷贝,但是它不能共享这个原始类型变量自身。

多个线程间变量的同步都是先同步到主内存中,然后主内存再同步到其他线程的变量副本上,但无法保证同步是立刻执行的,加volatile之后会立刻同步。

在本文中的作用就是当一个线程修改了shutdownRequested之后,其他线程获取再次获取shutdownRequested的值就是最新的,也就是达到了立刻停止doWork。

推荐问题
宣传栏