JCStress工具的使用
1、pom.xml引入对应依赖
<!--jcstress核心包-->
<dependency>
<groupId>org.openjdk.jcstress</groupId>
<artifactId>jcstress-core</artifactId>
<version>0.3</version>
</dependency>
<!-- jcstress测试用例包 -->
<dependency>
<groupId>org.openjdk.jcstress</groupId>
<artifactId>jcstress-samples</artifactId>
<version>0.3</version>
</dependency>
2、测试类代码
@JCStressTest
@Outcome(id = {"1", "4"}, expect = Expect.ACCEPTABLE, desc = "OK")
@Outcome(id = "0", expect = Expect.ACCEPTABLE_INTERESTING, desc = "!!!")
@State
public class Test1 {
int num = 0;
boolean ready = false;
@Actor
public void actor1(I_Result r) {
if(ready) {
r.r1 = num + num;
}else{
r.r1 = 1;
}
}
@Actor
public void actor2(I_Result r) {
num = 2;
ready = true;
}
}
3、执行方法

4、执行结果:在高并发的情况下,会出现不想要的结果,也就是指令进行了重排序

Java并发测试:JCStress实战指南

本文介绍了如何使用JCStress工具进行并发测试,通过在pom.xml中引入jcstress-core和jcstress-samples依赖,创建测试类并定义@JCStressTest、@Outcome和@State注解,展示了一个简单的并发场景。执行测试后,发现存在指令重排序导致的并发问题。
569

被折叠的 条评论
为什么被折叠?



