Recomendado, 2024

Escolha Do Editor

Diferença entre sleep () e wait () Método em Java

O método sleep e wait parece fazer a mesma tarefa, mas eles são muito diferentes um do outro. O método Sleep pertence à classe Thread e o método wait pertence à classe Object. A diferença mais importante que os distingue é que o método do sono mantém o bloqueio no objeto até ser interrompido ou terminar sua execução. Por outro lado, o método de espera libera o bloqueio no objeto para permitir que os outros objetos sejam executados até que seja retomado pelo método de notificação. Existem mais algumas diferenças entre o método de espera e o de espera; você pode explorá-los no gráfico de comparação mostrado abaixo.

Gráfico de comparação

Base para Comparaçãodormiresperar
BasicO método Sleep não libera o bloqueio em um objeto até que ele seja interrompido.O método Wait libera o bloqueio no objeto para permitir que outros objetos sejam executados até que o método notify ou notifyAll seja invocado.
ClasseO método Sleep é definido na classe Thread.O método de espera é definido na classe Object.
SincronizadoO método Sleep não precisa ser chamado dentro do contexto Sincronizado.O método de espera deve ser chamado dentro do contexto Sincronizado.
ConclusãoA execução do método de suspensão é concluída quando um thread o interrompe ou quando o método do tempo de suspensão é expirado.A execução do método wait é concluída quando o método notify () ou notifyAll () o interrompe.
EstáticoO método do sono é um método estático.O método de espera não é estático é por isso que precisa de objeto para invocá-lo.
ExecuçãoO método de suspensão é executado no encadeamento atual.O método de espera é executado no objeto.
ExceçãoInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Definição do Método do Sono

O método sleep é o método estático da classe Thread . O método de suspensão é chamado quando um encadeamento não deseja executar nenhuma tarefa por um determinado período de tempo. O método sleep conclui sua execução quando o tempo do método é expirado ou é interrompido por algum outro thread na execução. Após a conclusão do método de suspensão, o encadeamento novamente ganha seu status executável. Há dois do método do sono como mostrado abaixo.

 sono nulo nativo estático público (longo milissegundo); public static void sleep (longos milissegundos e int nanossegundos); 

Nas duas formas acima, você pode observar que o tempo é mencionado na forma do método do sono. Isso ocorre porque um thread sempre dorme por um determinado tempo mencionado no parâmetro. O método sleep pode ser interrompido por qualquer outro thread durante sua execução; portanto, ele pode lançar a InterruptedExecption. Você deve tomar cuidado para que a exceção seja tratada pelo bloco try / catch ou por palavras-chave do Throws. Caso contrário, isso levará ao erro de tempo de compilação. O método sleep mantém o bloqueio no objeto atual na execução e não permite que nenhum outro objeto seja executado até que ele termine sua execução.

Definição do método de espera

Wait é o método definido na classe Object . O método de espera é usado quando várias tarefas (encadeamentos) estão lutando pelo mesmo recurso, uma de cada vez. O método de espera, quando chamado, libera o bloqueio no objeto que chamou o método de espera. E fornecer uma chance para outro objeto para ser executado até que um método de notificação seja invocado, o qual retome ainda mais o bloqueio no objeto liberado pelo método de espera. O método de espera tem o seguinte formato.

 esperar(); espera (milissegundo longo); espera (milissegundo longo, nanosegundo int); 

Como nas três formas acima do método de espera, o primeiro método não tem nenhum parâmetro de tempo, significa que a execução do método de espera continuará até a notificação, ou o método notifyAll não será invocado. Os outros dois métodos possuem parâmetros de tempo. Então, eles serão executados até o tempo expirar ou até que o método notify ou noitfyAll seja chamado antes do tempo expirar. O método de espera pode lançar exceções. IllegalArgumentException, se o argumento de tempo transmitido for negativo. IllegalMonitorStateException, se o segmento atual não estiver usando o recurso. InterruptedException, se o método de espera for interrompido.

Principais diferenças entre o sono e o método de espera em Java

  1. O ponto principal que distingue o método sleep e wait é que o método sleep detém o bloqueio no objeto até que ele seja interrompido ou seu tempo expire. No entanto, o método de espera libera o bloqueio no objeto que o chama e dá a outros objetos a chance de executar.
  2. O método sleep é definido na classe Thread, enquanto o método wait é definido na classe Object .
  3. O método do sono não precisa ser chamado a partir do contexto sincronizado. Mas o método de espera precisa ser chamado de sincronizado.
  4. O método sleep é ativado se a hora do método expirar ou for interrompida pelo outro thread. O método de espera é despertado
    quando o notificar ou notificar Todo o método é invocado.
  5. O método sleep é o método estático, enquanto o método wait não é um método estático .
  6. O método sleep é executado no encadeamento atual, enquanto o método wait é executado no objeto que o invoca.
  7. A exceção lançada pelo método sleep é InterruptedException, enquanto as exceções thrwon pelo método wait são IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Conclusão:

Quando vários encadeamentos desejam usar o mesmo recurso um por um, o método de espera deve ser usado. Quando um encadeamento não deseja executar nenhuma tarefa, o método de suspensão deve ser usado.

Top