volatile boolean called = false;这是 - > if(!called&&(called = true)){...做一次......}原子操作?

时间:2017-08-17 10:11:48

标签: java concurrency synchronization atomic

说你有:

   volatile boolean called  = false;  

这是

   if ( !called  && (called = true) ) { ... do once ... } 

原子操作?

我知道 AtomicBoolean 。问题不在于此,所以试着抵制你的冲动。

1 个答案:

答案 0 :(得分:2)

在一个天真的实现中,这可以归结为:

    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则为分支),但这与您理性预期的帮助相同。

奇怪的问题。