Sobes.tech
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 de Timed Waiting (ou Waiting com timeout). yield() coloca o thread em estado de Runnable.
  • 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