Sobes.tech
Middle

Какви са разликите между методите Thread.sleep() и Thread.yield()?

sobes.tech AI

Отговор от AI

Thread.sleep() спира изпълнението на текущия поток за определено време, като го прехвърля в състояние Timed Waiting. Той не предава CPU на други потоци. Thread.yield() информира планировчика на потоци, че текущият поток е готов временно да отстъпи изпълнението на други потоци с същия или по-висок приоритет, но няма гаранция, че това ще се случи. yield() прехвърля потока в състояние Runnable.

Основните разлики:

  • Продължителност: sleep() гарантира спиране за зададеното време. yield() не гарантира предаване на управление или конкретна продължителност на паузата.
  • Състояние на потока: sleep() прехвърля потока в състояние Timed Waiting (или Waiting с таймаут). yield() прехвърля потока в състояние Runnable.
  • Назначение: sleep() се използва за въвеждане на забавяния. yield() се използва за предоставяне на възможност за изпълнение на други потоци, особено в цикли, за да се избегне монополизацията на CPU.
  • Планировчик: sleep() не влияе на планировчика (освен че потокът е неактивен). yield() е подсказка за планировчика.

Пример за използване:

// Използване на sleep()
try {
    Thread.sleep(100); // Спиране за 100 милисекунди
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}
// Използване на yield()
Thread.yield(); // Опит за отстъпване на изпълнението