Gráfico de comparação
Base para Comparação | dormir | esperar |
---|---|---|
Basic | O 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. |
Classe | O método Sleep é definido na classe Thread. | O método de espera é definido na classe Object. |
Sincronizado | O 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ão | A 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ático | O 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ção | O método de suspensão é executado no encadeamento atual. | O método de espera é executado no objeto. |
Exceção | InterruptedException | IllegalArgumentException, 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
- 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.
- O método sleep é definido na classe Thread, enquanto o método wait é definido na classe Object .
- 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.
- 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. - O método sleep é o método estático, enquanto o método wait não é um método estático .
- O método sleep é executado no encadeamento atual, enquanto o método wait é executado no objeto que o invoca.
- 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.