volatile 指令重排序问题

zk3389 2013-09-13 03:28:46
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);
}
}

}

始终没有出现指令重排序,为什么?
...全文
201 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
caofeng891102 2013-09-14
  • 打赏
  • 举报
回复
学习了。。
zk3389 2013-09-14
  • 打赏
  • 举报
回复
应该是运行期间优化所致,如果出现指令重排序的话,另一线程输出的是空值
healer_kx 2013-09-13
  • 打赏
  • 举报
回复
你怎么验证的?你看字节码了?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧