“易失性”关键字的用途是什么?
我读了一些关于关键字的文章,但我无法弄清楚它的正确用法。你能告诉我它应该在C#和Java中用于什么吗?volatile
我读了一些关于关键字的文章,但我无法弄清楚它的正确用法。你能告诉我它应该在C#和Java中用于什么吗?volatile
请考虑以下示例:
int i = 5;
System.out.println(i);
编译器可以将其优化为仅打印 5,如下所示:
System.out.println(5);
但是,如果有另一个可以更改的线程,则这是错误的行为。如果另一个线程更改为 6,则优化后的版本仍将打印 5。i
i
关键字可防止此类优化和缓存,因此当一个变量可以被另一个线程更改时很有用。volatile
对于 C# 和 Java,“volatile”告诉编译器,变量的值绝不能被缓存,因为其值可能会在程序本身的范围之外更改。然后,编译器将避免任何优化,如果变量更改“超出其控制范围”,则可能导致问题。