1.Thread.sleep()
Можете да вмъкнете паузи в изпълнението на Java програма. Това обикновено не е необходимо, тъй като потребителите искат техните програми да работят възможно най-бързо. Не много хора биха се зарадвали, ако умишлено забавите codeа си.
Но като програмист може да има много ситуации, в които паузата във вашия code ще бъде полезна. Например, да предположим, че пишете игра и искате тя да прави нещо веднъж на всеки две секунди or няколко пъти в секунда.
По принцип паузите са полезни, така че нека да видим How да добавите пауза към вашия code. Всъщност е много просто:
Thread.sleep(duration);
Къде duration
е дължината на паузата в мorсекунди ( 1/1000
от секунда).
Това изявление ще постави на пауза вашата програма за duration
мorсекунди. Примери:
|
Пауза на програмата за 2 секунди. |
|
Пауза на програмата за половин секунда. |
|
Пауза на програмата за 1 час. |
Ето How може да се използва на практика. Да кажем, че пишем програма, която ще изстреля космически кораб. Ето How може да изглежда codeът:
|
Всяка секунда програмата ще показва число: 10 , след това , 9 след това 8 и т.н. Когато броячът достигне 0 , програмата ще извежда " Let's go! " |
2. Правилно изчисляване на пауза
Продължителността на паузата е лесна за изчисляване. Ако имате нужда програмата да прави нещо веднъж в секунда, тогава паузата е 1000 ms. Ако 2 пъти в секунда, направете пауза за 500 ms (1000/2).
Ако трябва да направите нещо 15 пъти в секунда, направете пауза за 66 ms (1000/15). Всичко изглежда доста просто:
The duration of one iteration of the loop = 1000 / number of times per second
Но тук има един много важен нюанс. Въпреки че много оператори се изпълняват много бързо, те не са мигновени.
Виж това. Да приемем, че имате действие, което отнема 100 мorсекунди за изпълнение. Искате да извършите това действие 5 пъти в секунда. Колко време трябва да направите пауза? Определено не 200ms.
За да се извърши действието 5 пъти в секунда, трябва времето, необходимо за изпълнение на действието, плюс продължителността на паузата да бъде равно на 200 ms. Ако направим това, то ще работи точно 5 пъти в секунда. В нашия случай действието изисква 100 ms, което означава, че остават още 100 ms за пауза.
pause duration = duration of one iteration of the loop - time required to execute the action
Разработчиците на игри са добре запознати с факта, че времето, необходимо за изпълнение на действие, е много по-високо от нула. Както и хората, които играят игри.
Ако една игра работи с 20 FPS, това означава, че може да нарисува само 20 кадъра на екрана за една секунда. 1000/20
дава 50 ms. Това е времето, необходимо за начертаване на рамка, докато играете играта.
3. Наносекунди
Компютрите днес са много по-бързи, отколкото при създаването на Java. Това означава, че пауза от 1 мorсекунда може да не е достатъчно детайлна.
Да предположим, че имаме няHowво супер кратко действие, което искаме да извършим 2000 пъти в секунда. Как да направим пауза за половин мorсекунда?
За това има още един вариант на Thread.sleep()
метода:
Thread.sleep(milliseconds, nanoseconds);
Този метод поставя програмата в режим на заспиване за определен период от мorсекунди и наносекунди.
Наносекунди са 1 мorонна от мorсекунда. Това означава, че пауза от една и половина мorсекунди ще изглежда така:
Thread.sleep(1, 500_000);
И ако искате пауза от 1/10
мorсекунда, трябва да напишете това:
Thread.sleep(0, 100_000);
Може да не използвате този метод в програмите си в момента. Но е по-добре да знаете за него и да не го използвате, отколкото да имате нужда от него и да не знаете за него.
4. TimeUnit
клас
Между другото, Java има още един клас, който ще улесни живота ви, ако решите да забавите приложението си. Говорим за TimeUnit
класа в java.util.concurrent
пакета.
Не забравяйте, че тъй като класът не е в java.lang
пакета, трябва or да добавите реда import java.util.concurrent.TimeUnit;
, or да пишете java.util.concurrent.TimeUnit
всеки път във вашия code.
Този клас прави същото като Thread.sleep()
, но е по-удобен:
TimeUnit.HOURS.sleep(15)
Този code ще постави вашата програма в режим на заспиване за 15 часа. Налични са и minutesи, секунди, дни. Както и микросекунди (1/1000 000) и наносекунди (1/1000 000 000).
Класът TimeUnit
има следните свойства:
- наносекунди:
NANOSECONDS
- микросекунди:
MICROSECONDS
- мorсекунди:
MILLISECONDS
- секунди
SECONDS
- minutesи:
MINUTES
- часа:
HOURS
- дни:
DAYS
Работата с тези свойства е супер удобна, тъй като няма нужда да мислите за преобразуване, да речем, на часове в мorсекунди. Такъв code е много по-приятен за писане и четене.
GO TO FULL VERSION