Java for Beginner
675 subscribers
558 photos
156 videos
12 files
851 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Класс TimeUnit

Класс TimeUnit из пакета java.util.concurrent предоставляет удобный способ работы с временными единицами. Он позволяет выполнять преобразования между различными единицами времени и упрощает работу с многопоточностью, особенно при использовании методов, которые требуют указания времени ожидания.

Основы класса TimeUnit

Класс
TimeUnit реализует перечисление (enum), содержащее семь основных временных единиц:
NANOSECONDS - наносекунды
MICROSECONDS - микросекунды
MILLISECONDS - миллисекунды
SECONDS - секунды
MINUTES - минуты
HOURS - часы
DAYS - дни

Каждая единица времени в TimeUnit поддерживает методы для преобразования в другие единицы и для ожидания.

Внутреннее устройство

Класс TimeUnit не имеет внутреннего состояния, так как это перечисление. Все методы статические, и они принимают входные значения, которые вы передаете в виде аргументов. Это делает класс очень удобным и легким в использовании.

Применение

Класс TimeUnit используется в различных ситуациях:
Упрощение кода. Он позволяет избежать неочевидных преобразований между различными единицами времени, делая код более читаемым и понятным.
Управление потоками. Использование методов sleep() и awaitTermination() из ExecutorService с классом
TimeUnit помогает избежать ошибок, связанных с неправильными единицами времени.
Тестирование. Класс удобно использовать для создания временных задержек в тестах.


Примеры использования

Пример 1: Преобразование единиц времени
import java.util.concurrent.TimeUnit;

public class TimeUnitExample {
public static void main(String[] args) {
long hours = 2;
long minutes = TimeUnit.HOURS.toMinutes(hours);
long seconds = TimeUnit.HOURS.toSeconds(hours);

System.out.println(hours + " часа = " + minutes + " минут.");
System.out.println(hours + " часа = " + seconds + " секунд.");
}
}


Пример 2: Ожидание с использованием TimeUnit
import java.util.concurrent.TimeUnit;

public class TimeUnitSleepExample {
public static void main(String[] args) {
System.out.println("Программа начинается.");
try {
TimeUnit.SECONDS.sleep(2); // Ожидание 2 секунды
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("2 секунды прошли.");
}
}


Пример 3: Использование с ExecutorService
import java.util.concurrent.*;

public class ExecutorServiceExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(1);

executor.submit(() -> {
try {
System.out.println("Задача началась.");
TimeUnit.SECONDS.sleep(3); // Ожидание 3 секунды
System.out.println("Задача завершена.");
} catch (InterruptedException e) {
e.printStackTrace();
}
});

executor.shutdown();
try {
if (!executor.awaitTermination(5, TimeUnit.SECONDS)) {
executor.shutdownNow(); // Принудительное завершение
}
} catch (InterruptedException e) {
executor.shutdownNow();
}
}
}


Важно помнить

Использование TimeUnit делает код более читаемым и менее подверженным ошибкам, связанным с неправильным использованием временных единиц.
При использовании методов ожидания всегда обрабатывайте InterruptedException, чтобы избежать проблем с прерываниями потоков.


#Java #Training #Medium #TimeUnit