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!

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
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.