Testando a segurança de inicialização dos campos finais

Estou tentando simplesmente testar a segurança de inicialização dos campos finais, conforme garantido pelo JLS. É para um trabalho que estou escrevendo. No entanto, não consigo 'falhar' com base no meu código atual. Alguém pode me dizer o que estou fazendo de errado, ou se isso é apenas algo que tenho que repetir várias vezes e depois ver um fracasso com algum tempo azarado?

Aqui está o meu código:

public class TestClass {

    final int x;
    int y;
    static TestClass f;

    public TestClass() {
        x = 3;
        y = 4;
    }

    static void writer() {
        TestClass.f = new TestClass();
    }

    static void reader() {
        if (TestClass.f != null) {
            int i = TestClass.f.x; // guaranteed to see 3
            int j = TestClass.f.y; // could see 0

            System.out.println("i = " + i);
            System.out.println("j = " + j);
        }
    }
}

e meus tópicos estão chamando assim:

public class TestClient {

    public static void main(String[] args) {

        for (int i = 0; i < 10000; i++) {
            Thread writer = new Thread(new Runnable() {
                @Override
                public void run() {
                    TestClass.writer();
                }
            });

            writer.start();
        }

        for (int i = 0; i < 10000; i++) {
            Thread reader = new Thread(new Runnable() {
                @Override
                public void run() {
                    TestClass.reader();
                }
            });

            reader.start();
        }
    }
}

Eu executei esse cenário muitas e muitas vezes. Meus loops atuais estão gerando 10.000 threads, mas já fiz isso com 1000, 100000 e até um milhão. Ainda sem falhas. Eu sempre vejo 3 e 4 para ambos os valores. Como posso fazer isso falhar?

questionAnswers(7)

yourAnswerToTheQuestion