métodos wait () e sleep () em Java
1. espere ()
A função do método wait() é permitir que a thread que adquiriu o bloqueio libere o bloqueio e entre no bloco de espera. Portanto, o método wait() deve ser chamado somente quando o bloqueio for adquirido, caso contrário, uma exceção será lançada, por exemplo:
public class Test{ public static void main(String[] args) throws InterruptedException { Test test = new Test(); test.wait(); } }
saída:
Ao chamar wait, você pode especificar quanto tempo esperar, caso contrário, o thread aguardará indefinidamente até ser ativado pelo método notify ou notifyAll.
O cenário de uso do método wait: O método wait geralmente é usado para exigir que um recurso continue executando o código, e o recurso é adquirido e preparado por outros encadeamentos. Neste ponto, você pode liberar o bloqueio e entrar na espera. Geralmente a estrutura é a seguinte:
sincronizard(lock) { while(condição não é verdadeira) { lock.wait(); } // condição é verdadeira, trabalho } // outro thread sincronizard(bloqueio) { // preparar recursos lock.notifyAll(); }
Dois, dormir ()
-
O método sleep() fará com que o thread atual entre em bloqueio;
-
Se o thread atual tiver um bloqueio, o bloqueio não será liberado quando o sono entrar no bloco;
-
A chamada do método sleep deve especificar o tempo de hibernação;
-
O método sleep é um método estático em Thread.
3. A diferença entre wait() e sleep()
-
A thread que espera entra deve ser despertada pelo método notify ou notifyAll.
-
A chamada do método wait requer que a thread atual adquira o bloqueio, ou seja, só pode ser chamada no método sincronizado.
-
O método wait é um método de instância em Object e sleep é um método estático em Thread.
-
O método wait fará com que o thread atual libere o bloqueio e, em seguida, entre na espera de bloqueio, enquanto o sleep não liberará o bloqueio.