Wie warte ich auf einen Thread, der seinen eigenen Thread erzeugt?

Ich versuche, eine Methode zu testen, die in einem separaten Thread funktioniert. Vereinfacht ausgedrückt:

public void methodToTest()
{
    Thread thread = new Thread()
    {
        @Override
        public void run() {
            Clazz.i = 2;
        }
    };
    thread.start();
}

In meinem Komponententest möchte ich Clazz.i == 2 testen, aber ich kann das nicht, weil ich denke, dass die Bestätigung ausgeführt wird, bevor der Thread den Wert ändert. Ich dachte daran, einen anderen Thread zu verwenden, um ihn zu testen, und dann Join zu verwenden, um zu warten, aber es funktioniert immer noch nicht.

SSCCE:

@Test
public void sscce() throws InterruptedException
{
    Thread thread = new Thread()
    {
        @Override
        public void run() {
            methodToTest()
        }
    };
    thread.start();     
    thread.join();  
    AssertEquals(2, Clazz.i);
}

public static class Clazz
{
    public static int i = 0;
}

Ich denke, das liegt daran, dass der Testhauptcode einen Thread erstellt, der auf den 2. Thread wartet (verbunden ist), aber der 2. Thread erledigt die Arbeit nicht erster Thread, während der dritte Thread das @ tClazz.i = 2 Nach der Behauptung.

Wie kann ich es so machen, dass der erste Thread auf den Thread wartet, den er startet sowie alle Threads, die dieser Thread startet?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage