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;
    }
}

0 ответов

Другие вопросы по тегам