1
resposta

Ordem de execução de código ao chamar um método em java

Boa noite. Hoje aconteceu algo no trabalho que achei meio estranho. Havia o seguinte código que executava em um determinado momento (projeto java web):

    //códigos...
    metodoQuePreencheObjeto(); //(dentro deste metodo eu chamava varios sets de um determinado objeto)
    xDao.saveOrUpdate(objetoPreenchidoPeloMetodo);//salva objeto preenchido (hibernate)
    lstDeObjetosX.forEach(obj -> {
        obj.setObjetoY(objetoPreenchidoPeloMetodo);
        x.saveOrUpdate(obj);
    });
    //códigos...

o que acontecia era que ao chamar metodoQuePreecheObjeto(); o java continuava executando os códigos abaixo dele sem ter terminado a execução de todos os sets dentro do método, sendo assim os códigos de: xDao.saveOrUpdate(objetoPreenchidoPeloMetodo); para baixo não eram executados. Pelo que entendo, o java por padrão é single-thread, ou estou engando? Para resolver o problema eu coloquei um retorno booleano dentro do método e envolvi o restante do código em um "if", e então funcionou. Eu pesquisei no celular no caminho de volta do trabalho e achei ter encontrado uma explicação lendo sobre threads. Cheguei em casa e fiz um teste parecido colocando um Thread.sleep();. Para meu espanto, tudo aconteceu na ordem certa. :0 Alguém poderia me dar pelo menos um norte de um conteúdo para procurar? Eu não acho que colocar um retorno no método seja uma boa solução. Obrigado!

1 resposta

Para isso acontecer o metodoQuePreencheUmObjeto tem que ta iniciando uma thread... Não vejo outra forma dele furar a ordem de execução.