日期:2014-05-20  浏览次数:20721 次

volatile 指令重排序问题
package org.volatiles;

import java.io.IOException;
import java.util.Properties;

/**
 * volatile禁止指令重排序优化
 * 
 * @author Byron
 * 
 */
public class VolatileTest2 {

boolean initialized = false;
String name;
String age;
String sex;

public static void main(String[] args) {
VolatileTest2 test = new VolatileTest2();
test.start();
}

public void start() {
Thread t1 = new Thread(new GetProperties());
Thread t2 = new Thread(new UseProperties());
t1.start();
t2.start();

}
/**
 * 获取文件中的属性信息
 * @author Byron
 *
 */
class GetProperties implements Runnable {
@Override
public void run() {
Properties p = new Properties();
try {
p.load(getClass().getResourceAsStream("test.properties"));
name = p.getProperty("name");
age = p.getProperty("age");
sex = p.getProperty("sex");
initialized = true;// 实验了无数次还是没有出现重排序

} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
 * 读取GetProperties从文件中取出的信息
 * @author Byron
 *
 */
class UseProperties implements Runnable {
@Override
public void run() {
while (!initialized) {
// wait
// System.out.println("wait 1 ms");
}
System.out.println("name is: " + name);
System.out.println("age is: " + age);
System.out.println("sex is: " + sex);
}
}

}

始终没有出现指令重排序,为什么?

------解决方案--------------------
你怎么验证的?你看字节码了?
------解决方案--------------------
学习了。。