Middle
Qual é a diferença entre os métodos Thread.sleep() e Thread.yield() ?
sobes.tech IA
Resposta da IA
Thread.sleep() pausa a execução do thread atual por um tempo determinado, colocando-o em estado de Timed Waiting. Ele não cede a CPU a outros threads. Thread.yield() informa ao agendador de threads que o thread atual está pronto para ceder temporariamente a execução a outros threads com a mesma ou maior prioridade, mas não há garantia de que isso aconteça. yield() coloca o thread em estado de Runnable.
Principais diferenças:
- Duração:
sleep()garante a suspensão por um tempo especificado.yield()não garante a transferência de controlo nem uma duração específica de pausa. - Estado do thread:
sleep()coloca o thread em estado deTimed Waiting(ouWaitingcom timeout).yield()coloca o thread em estado deRunnable. - Propósito:
sleep()é usado para introduzir atrasos.yield()é usado para permitir a execução de outros threads, especialmente em loops, para evitar a monopolização da CPU. - Agendador:
sleep()não afeta o agendador (exceto que o thread não está ativo).yield()é uma sugestão para o agendador.
Exemplo de uso:
// Uso de sleep()
try {
Thread.sleep(100); // Pausa por 100 milissegundos
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
// Uso de yield()
Thread.yield(); // Tentativa de ceder a execução