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(); // փորձել տալ կատարումը