- // 使用volatile变量来控制并发
- public class VolatileVariableTest {
- volatile boolean shutdownRequested; // volatile变量
- public void shutdown() {
- shutdownRequested = true;
- }
- public void doWork() {
- while(!shutdownRequested) {
- // do sth.
- }
- }
- // 指令重排序演示(伪代码)
- public void instruct_reorder() {
- Map configOptions;
- char[] configText;
- // 此变量必须为 volatile
- volatile boolean initialized = false;
- // 假设如下代码在线程A 中执行
- // 模拟读取配置信息,当读取完成后将 initialized 设置为true 已通知其余线程配置可用
- configOptions = new HashMap();
- configText = readConfigFile(filename);
- processConfigOptions(configText, configOptions);
- initialized = true;
- // 假设如下代码在线程B 中执行
- // 等待initialized 为true,表明线程A 已经把配置信息初始化完成
- while(!initialized) {
- sleep();
- }
- // 使用线程A 中初始化好的配置信息
- do_sth_with_config();
- }