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!