JCStress при сбое теста Singleton
Я провел тест JCStess на Singleton, ниже - мой код. В общем, этот код завершится ошибкой из-за того, что несколько потоков будут гоняться за экземпляром, потому что блок if вернет более одного экземпляра. Но мой тест JCStress всегда успешен.
Что-то не так с моим тестом?
@Outcome(id = {"2"}, expect = Expect.ACCEPTABLE, desc = "Abnormal outcome")
@Outcome(expect = Expect.FORBIDDEN, desc = "Other forbidden outcome")
@State
public class ConcurrencyTest {
static class Singleton{
private static Singleton instance;
public static volatile int i = 1;
private Singleton() {
synchronized (Singleton.class) {
i++;
}
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
@Actor
public void method1(IntResult1 r) {
r.r1 = Singleton.getInstance().i;
}
@Actor
public void method2(IntResult1 r) {
r.r1 = Singleton.getInstance().i;
}
}