在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。
在JAVA5之前虽然Volatile不允许volatile变量之间重排序,但是却允许volatile和不同变量重排序,这就导致了很多出人意料结果。而java5之后volatile变量和不同变量之间也不允许重排序才使得,各种意料结果得到解决。如下图在java5之前使用Volatile会导致错误
class test
{
int a = 0;
volatile boolean flag = false;
线程:A
public void writer()
{
a = 1; // 1
flag = true; // 2
}
线程:B
public void reader()
{
if (flag) // 3
{
int i = a; // 4
……
}
}
}