我在接受采访时被问到了这个问题。除了多线程之外,我不会给出一个案例。
答案 0 :(得分:3)
您可以声明变量volatile
,无论您是否正在使用多个线程执行任何操作,但在多线程之外它实际上没有用,并且会使该变量的读取和写入速度变慢而没有明显的增益
答案 1 :(得分:0)
Java语言规范(JLS)中volatile
的唯一指定行为位于Java内存模型(JMM)中。由于JMM是关于一个线程是否以及何时看到由另一个线程执行的存储器操作的结果,所以一个简单的" No"将是这个问题的有效答案。 (在我看来。)
除了......"可以使用"和"应该使用"用英语表示不同的东西。因此,一个学究者可能会指出你" can"在字段声明上使用volatile
,其中只有一个线程将使用该字段。你"可以"做到这一点。这是允许的......但它毫无意义。
另一点需要注意的是volatile
会导致本机代码编译器发出不同的代码序列。这些代码序列可能会导致代码在JLS / JMM视为超出范围的上下文中以不同的方式表现。例如,如果您(以某种方式)将对象字段映射到内存映射的硬件设备寄存器等,则可能是相关的。
但是,这些都超出了JLS中指定的Java语言范围。绝对不便携。与普通的Java程序/程序员无关。