标签:sys 方法 功能 读取 blog port 关注 logs 实验
在学习volatile语义的可见性和禁止指令重排序的相关测试中,发现并不能体现出禁止指令重排序的特性
实验代码如下
package com.aaron.beginner.multithread.volatiletest; import java.util.concurrent.CountDownLatch; /** * @author * @description 一句话描述该文件的用途 * @date 2017-03-01 */ public class VolatileAndNonVolatileTest { private volatile boolean flag; private int num; public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 5000; i++) { final VolatileAndNonVolatileTest test = new VolatileAndNonVolatileTest(); CountDownLatch latch = new CountDownLatch(2); Thread write = new Thread(() -> { test.write(); latch.countDown(); }); Thread read = new Thread(() -> { test.read(); latch.countDown(); }); write.start(); read.start(); latch.await(); } } private void read() { if (flag) { System.out.println("=" + num * num); } } private void write() { num = 10;//步骤1 flag = true;//步骤2 } }
实验步骤:
注意关注代码中flag变量,会分别测试flag变量有volatile修饰和没有volatile修饰时的输出情况
本测试代码主要的功能:
实验步骤:
预期结果:
实际结果:
即加了和没加volatile的结果是一致的
试问各位大神,有知道怎么测试这个volatile,体现禁止了指令重排序的特点和可见性的特点吗?
标签:sys 方法 功能 读取 blog port 关注 logs 实验
原文地址:http://www.cnblogs.com/aaronfeng/p/6484550.html