在Java并发环境下,为什么b == (b = a)不总是true?

在Java中,为什么b == (b = a)这段代码在多线程环境不总是返回true?

a可以被多个线程修改。
b初始化为b = a
在打印b == (b = a)时,结果却不一定为true。

可是,操作符的优先级不是先b = a再b == b吗?

代码如下:

public class Demo implements Runnable{    public static double a = 0;    @Override
    public void run() {
        a = Math.random()*100;        double b = a;
        System.out.println(b == (b = a));
    }     public static void main(String args[]) {         for(int i=0;i<10;i++) {             new Thread(new Demo()).start();
         }
     }
    
}

打印结果:

falsetruetruetruefalsetruefalsetruetruetrue


湖上湖
浏览 559回答 1
1回答

红颜莎娜

b==b并不是直接比较两个b,而且会先把b放到寄存器中,然后比较两个寄存器中的值。在将第二个b放入寄存器的时候,b可能会被修改。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java