- // 使用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();
- }