Java possui vários métodos para realizar certas ações. Método é um grupo de código, que é executado apenas quando é chamado; e pode ou não retornar um resultado.
Métodos como sleep e wait são usados para multithreading. Ambos fazem uma pausa e colocam o encadeamento em espera, mas têm grandes diferenças de funcionamento.
Sleep vs Wait
A diferença entre os métodos sleep () e wait () é que o método sleep () é usado no programa para pausar a execução da thread atual por um determinado período de tempo enquanto o método wait () é usado no programa para pausar ou suspender o encadeamento atual até que métodos específicos sejam chamados.
Durante o uso do método sleep, o thread atual não perde a propriedade do monitor. O sono é um método estático e faz parte do thread da classe. Depois que o tempo de espera termina, o encadeamento volta ao estado executável original. Ele garante a utilização completa da CPU, enquanto espera.
Enquanto o método wait () é usado no programa Java para ordenar que o encadeamento atual espere, até que outro encadeamento não seja chamado para aquele objeto. A thread então continua com a execução, uma vez que obtenha o controle do monitor. Não é um método estático ao contrário do sono e faz parte da classe de objeto.
Tabela de comparação entre dormir e esperar
Parâmetros de comparação | Dorme | Esperar |
Classe | O método sleep é uma parte da classe thread | O método de espera é uma parte da classe de objeto |
Tipo de método | O sono é um método estático | A espera não é um método estático |
Técnica de chamada | O método sleep pode ser chamado de fora do contexto sincronizado | O método de espera pode ser chamado apenas a partir do contexto sincronizado |
Liberação de bloqueio | O método Sleep não libera o bloqueio no objeto, pelo tempo limite especificado, durante a sincronização | O método Wait libera o bloqueio no objeto, para ter uma chance de execução, durante a sincronização |
Declaração | public static void sleep () | public final void wait () |
O que é dormir?
O thread sleep () é um método estático no programa Java que suspende o thread atual e o coloca em estado de espera por um período de tempo estipulado. Depois que o estado de espera e o tempo acabam, a condição do thread é alterada para o estado executável. E então aguarda a CPU para execução posterior.
O objetivo deste método é criar um atraso de alguns segundos no programa e, simultaneamente, ter o máximo aproveitamento da CPU. Se o sistema estiver ocupado ou sobrecarregado, o tempo de espera ou pausa será maior e, caso contrário, será menor ou igual ao tempo real.
O tipo de retorno do método sleep pode ser dito nulo, pois não retorna nenhum valor. A linha de espera não perde o monitor nem bloqueia a linha que já foi adquirida. Se, em qualquer caso, o sono for perturbado, o thread lançará Interrupted_Exception. A duração real para a qual o encadeamento entraria em espera geralmente depende dos agendadores e cronômetros do sistema que fazem parte do sistema operacional.
A sintaxe do método de sono é - public static void sleep (longos milissegundos)
public static void sleep (longos milissegundos, int nanossegundos)
Aqui, milissegundos e nanossegundos é o tempo durante o qual o thread entraria em repouso.
O que é esperar?
Wait () é um método usado para comunicação entre threads. Sempre que o thread wait () é usado, o thread de chamada ou atual é pausado e suspenso, até que métodos como notificar () ou notificarAll () sejam invocados no sistema.
O método notificar () despertaria o encadeamento especificado, enquanto notificarAll () é aplicável para cada encadeamento. Quando sincronizado, o método wait desiste do bloqueio para os recursos. Não há valor de retorno do método Wait, portanto, pode-se dizer que ele retorna void.
As duas exceções do método Wait são Interrupted_Exception (quando o segmento atual é interrompido durante seu sono) e IllegalMonitorStateException (quando o segmento atual não é o proprietário do objeto no monitor).
O método Wait faz parte da classe de objeto. O método só é aplicável e pode ser chamado em um bloco sincronizado. O método de espera liberta a tela suspensa ou bloqueada durante a sincronização. E o método Wait permite exclusivamente que vários threads sincronizados acessem o mesmo objeto um por um.
A sintaxe do método Wait é - public final void wait ()
Principais diferenças entre dormir e esperar
Conclusão
O método Sleep e Wait são métodos nativos de Java. E ambos são amplamente usados para fazer com que o thread em andamento entre em um estado de condição não executável. Ambos os métodos são usados para multithreading no programa.
O método Sleep fornece a opção exclusiva de bloquear a tela por um período de tempo específico, que geralmente dura de nanossegundos a milissegundos. Mas o método wait bloqueia ou suspende a tela até que outro método seja invocado, portanto, a duração do tempo não permanece específica como durante o uso do método sleep.
Eles se diferenciam uns dos outros em termos de funcionamento específico, como classe, método, sincronização e duração do bloqueio e liberação e vários outros parâmetros. Freqüentemente, os programadores ficam confusos sobre qual método poderia ser ideal para suspender o thread. O uso dos métodos depende de requisitos como necessidade, urgência e período de tempo do segmento atual.