Với lớp sau đây:giá trị trở lại của toán tử gán trong mã đồng thời
class Foo {
public volatile int number;
public int method1() {
int ret = number = 1;
return ret;
}
public int method2() {
int ret = number = 2;
return ret;
}
}
và được nhiều chủ đề kêu gọi method1()
và method2()
đồng thời trên cùng một Foo
Ví dụ, có thể một cuộc gọi đến method1() bao giờ quay trở lại bất cứ điều gì khác hơn 1?
Tối ưu hóa này có thể được cho phép đối với các trường [trường dễ bay hơi] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.1.4) không? – trashgod
Tôi tò mò mặc dù, nếu đó là những gì spec dự định. Tôi nghĩ rằng họ có thể đã chỉ định b trong "và sau đó gán giá trị của b cho một" chỉ để làm cho nó rõ ràng trong trường hợp a, b và c có các loại khác nhau (nói nguyên thủy tích phân/nổi loại) và chuyển đổi xảy ra, chuyển nhượng xảy ra như-nếu giá trị chuyển đổi được sử dụng. Ví dụ: nếu a và c là đôi và b là một phao. – BeeOnRope
@BeeOnRope Điều đó khá khả thi - trang JLS có vẻ quan tâm hơn đến chuyển đổi loại so với các trường dễ bay hơi. – Bringer128