undefined

Здоровый sleep

Java Core
6 уровень , 6 лекция
Открыта

— Привет, Амиго! Билаабо сегодня расскажет тебе о самом интересном методе при работе с нитями – это метод sleepМетод sleep объявлен как статический метод класса Thread, т.е. он не привязан ни к какому объекту. Цель этого метода, чтобы программа «заснула» на некоторое время. Вот как это работает:

Код Описание
public static void main(String[] args)
{
Thread.sleep(2000);
}
Программа запустится.

Затем замрет на 2 секунды (2 000 миллисекунд)

Затем завершится.

Единственный параметр метода sleep – это время. Время задается в тысячных долях секунды (миллисекундах). Как только нить вызывает этот метод, она засыпает на указанное количество миллисекунд.

— А где это лучше всего использовать?

— Этот метод часто используется в дочерних нитях, когда нужно делать какое-то действие постоянно, но не слишком часто. Смотри пример:

Код Описание
public static void main(String[] args)
{
while (true)
{
Thread.sleep(500);
System.out.println("Tik");
}
}
Программа будет работать вечно – условие продолжения цикла никогда не нарушится.

Вот что программа делает в цикле:
а) поспать полсекунды
б) вывести на экран текст «Tik»

Т.е. дважды в секунду будет выполняться некоторое действие.

— Ух ты, теперь это уже интересно.

— Рад, что тебе понравилось, мой друг Амиго!

— А если я хочу, чтобы какое-то действие выполнялась 100 раз в секунду, что нужно делать?

— Если действие должно выполняться 100 раз в секунду, а в секунде 1000 миллисекунд, значит, действие должно выполняться один раз в 10 миллисекунд.

Если твое действие занимает 2 миллисекунды, то нужно добавить к нему паузу длинной 8 миллисекунд. Вместе они будут выполняться как раз за 10 миллисекунд. И за секунду – как раз 100 раз.

Если же твое действие выполняется почти мгновенно, то поставь паузу (sleep) длиной 10 миллисекунд. Тогда в секунду будет тоже около 100 раз.

— Спасибо, Билаабо.

Комментарии (83)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
vladimir 24 уровень, Москва
7 апреля 2021
Эта статья максимум на 10 материи тянет, точно не на 16!
enot 18 уровень
5 апреля 2021
Не могу понять: Thread.sleep() - какой поток будет спать (тот, из которого вызывается?) В чем отличие его тогда от Thread.CurrentThread().sleep() ?
🦔 Виктор 20 уровень, Москва Expert
15 января 2021
Здоровая статья «Многопоточное программирование. Класс Thread» (Metanit, в целом очень толковый ресурс, ёмкая подача, ничего лишнего, в меру сдержано, без плавки мозга на первых порах, как это бывает на Хабре). Всё получится!
Е К 33 уровень, Краснодар
26 октября 2020
Репост статьи из комментов ниже - толковое дополнение
Dmitriy Tsoy 22 уровень, Санкт-Петербург
3 сентября 2020
Билаабо мне напоминает Зилибобу из Улицы Сезам. Тот тоже раз в полгода вылезет из своей берлоги, какую-нибудь дичь сморозит и обратно залезает.
Станислав Бынеев 28 уровень, Москва
27 августа 2020
Билаабо, ты реально блин кислый предмет, ю ноу
Temnota 19 уровень, Минск
3 июня 2020
Билаабо))) Биба и Боба)
Шамиль 22 уровень, Кисловодск Expert
10 мая 2020
Если каждые 10мс нужно выполнять какое то действие, а предугадать не возможно сколько времени занимает ваше действе то я придумал так:

        Date dateStart;
        Date dateEnd;
        int count=100;
        //каждые 10мс нужно выполнить действие 100 раз
        while (count-->0) {
            dateStart=new Date();
            //какое-то действие которое занимает допустим 2мс
            Thread.sleep(2);
            dateEnd=new Date();
            Thread.sleep(10-(dateEnd.getTime()-dateStart.getTime()));
        }
Майк 18 уровень
30 апреля 2020
- а если я хочу выполнить действие 10000 раз в секунду? 😀
Марк Цукерберг 20 уровень
1 апреля 2020
Билаабо реально чисто свой в доску чел, в меру хайповый. В общем 10/10