Como esperar por um thread que gera seu próprio thread?
Estou tentando testar um método que funciona em um thread separado, simplificado é assim:
public void methodToTest()
{
Thread thread = new Thread()
{
@Override
public void run() {
Clazz.i = 2;
}
};
thread.start();
}
No meu teste de unidade, quero testar o Clazz.i == 2, mas não posso fazer isso porque acho que a declaração é executada antes que o segmento altere o valor. Pensei em usar outro thread para testá-lo e, em seguida, use join para aguardar, mas ele ainda não funciona.
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;
}
Eu acho que isso ocorre porque o código principal do teste cria um encadeamento que está aguardando (unido) para o 2º encadeamento, mas o segundo encadeamento não faz o trabalho, cria outro encadeamento para fazer o trabalho e termina, que continua o primeiro enquanto o terceiro segmento faz oClazz.i = 2
após a afirmação.
Como posso fazer com que o primeiro thread aguarde pelo iníciobem como quaisquer threads iniciados por esse segmento?