假设你有:volatile boolean called = false;这是 - >如果(!称为&&(叫=真)){...做一次...}一个原子操作?
volatile boolean called = false;
这是
if (!called && (called = true)) { ... do once ... }
一个原子操作?
我知道关于AtomicBoolean。问题不在于如此,所以试图抵制你的冲动。
假设你有:volatile boolean called = false;这是 - >如果(!称为&&(叫=真)){...做一次...}一个原子操作?
volatile boolean called = false;
这是
if (!called && (called = true)) { ... do once ... }
一个原子操作?
我知道关于AtomicBoolean。问题不在于如此,所以试图抵制你的冲动。
在一个天真的实现,这可能归结为:
LOAD A ; called
NEG ; negate
BRF 1$ ; branch if false
LOAD 1 ; true
STOR A ; store into called
1$: ; do once
不完全是原子,是吗? Java编译器可能会将NEG/BRF序列更改为BRT(如果为true,则为分支),但是这可以帮助您尽可能合理地预期。
奇怪的问题。
不,不是。怎么会这样?你在这里显然有两个部分:1读取被调用的当前值并且如果它是假的,则进行测试; 2.分配true。 –
简答:“不,这不是原子操作”。 –
我很想投票结束重复到https://stackoverflow.com/questions/4876122/when-is-it-preferable-to-use-volatile-boolean-in-java-rather-than-atomicboolean? rq = 1 –