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);
}
}
}
始终没有出现指令重排序,为什么?
------解决方案--------------------
你怎么验证的?你看字节码了?
------解决方案--------------------
学习了。。