gpt4 book ai didi

java - 并发代码中赋值运算符的返回值

转载 作者:IT老高 更新时间:2023-10-28 20:56:07 28 4
gpt4 key购买 nike

给定以下类:

class Foo {
public volatile int number;

public int method1() {
int ret = number = 1;
return ret;
}

public int method2() {
int ret = number = 2;
return ret;
}
}

并且给定多个线程在同一个 Foo 实例上同时调用 method1()method2(),可以调用 method1()曾经返回 1 以外的任何值?

最佳答案

我认为答案取决于编译器。语言 specifies :

At run-time, the result of the assignment expression is the value of the variable after the assignment has occurred.

我想理论上这个值可以在第二个(最左边的)赋值发生之前改变。

但是,使用 Sun 的 javac 编译器,method1 将变成:

0:   aload_0
1: iconst_1
2: dup_x1
3: putfield #2; //Field number:I
6: istore_1
7: iload_1
8: ireturn

这会复制堆栈上的常量 1 并将其加载到 number 中,然后在返回 ret 之前加载到 ret 中>。在这种情况下,如果 number 中存储的值在赋值给 ret 之前被修改,则无关紧要,因为 1,而不是 号码正在分配中。

关于java - 并发代码中赋值运算符的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850676/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com