1.首先创建一个maven项目
2.引入jcstress-core依赖
<dependency>
<groupId>org.openjdk.jcstress</groupId>
<artifactId>jcstress-core</artifactId>
<version>0.14</version>
</dependency>
3.准备测试代码
import org.openjdk.jcstress.annotations.*;
import org.openjdk.jcstress.infra.results.I_Result;
/**
* @author:Ronin
* @since:2021/12/2
* @email:1817937322@qq.com
*/
@JCStressTest
@State
@Outcome(id = {"1", "4"}, expect = Expect.ACCEPTABLE, desc = "这是期待的结果")
@Outcome(id = "0", expect = Expect.ACCEPTABLE_INTERESTING, desc = "这是不期待的结果")
public class VisibilityTest {
/**
* 结果有三种可能 4, 1,0(这个0是因为指令重排)
*/
private int a = 0;
private boolean flag = false;
@Actor
public void method(I_Result result) {
if (flag) {
result.r1 = a * 2;
} else {
result.r1 = 1;
}
}
@Actor
public void method2(I_Result result) {
a = 2; //这个地方有可能会发生指令重排,也就是a=2和flag=true互换
flag = true;
}
}
4.配置
5.运行
之后会在根目录下生成两个文件,打开index.html 之后会在根目录下生成两个文件,打开index.html之后会在根目录下生成两个文件,打开index.html
成功!