Запартнерился с Jetbrains, создателями IntelliJ IDEA.
Подробнее о том, что это означает для канала и зрителей, напишу подробно в понедельник
Подробнее о том, что это означает для канала и зрителей, напишу подробно в понедельник
👍4🔥1
📚 Лямбда-выражения в Java
🔍 Ответ
Задание: Создайте список строк
Решение:
Объяснение:
В этом решении используется лямбда-выражение для сортировки списка строк
#решения #интервью
@code_it
🔍 Ответ
Задание: Создайте список строк
List<String> names, содержащий имена. Используя лямбда-выражение, отсортируйте этот список по длине строк. Затем с помощью другого лямбда-выражения выведите все имена, начинающиеся с буквы "А".Решение:
import java.util.Arrays;
import java.util.List;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Анна", "Иван", "Алексей", "Мария", "Алина", "Борис");
// Сортировка по длине строк
names.sort((s1, s2) -> s1.length() - s2.length());
System.out.println("Отсортированные имена по длине:");
names.forEach(System.out::println);
// Вывод имен, начинающихся с "А"
System.out.println("Имена, начинающиеся с 'А':");
names.stream()
.filter(name -> name.startsWith("А"))
.forEach(System.out::println);
}
}
Объяснение:
В этом решении используется лямбда-выражение для сортировки списка строк
names по длине. Лямбда-выражение (s1, s2) -> s1.length() - s2.length() выполняет сравнение двух строк по их длине. После сортировки используется другой лямбда-фильтр для выборки и вывода только тех имен, которые начинаются с буквы "А". Метод forEach используется для вывода отсортированных и отфильтрованных значений на экран.#решения #интервью
@code_it
1❤2👍1
📚 Потоки (Streams) в Java 8+
Теория:
Streams — это мощный инструмент, введённый в Java 8 для работы с последовательностями данных. Потоки позволяют обрабатывать данные на высоком уровне абстракции, используя функциональные подходы, такие как фильтрация, преобразование и агрегирование.
Основные особенности потоков:
1. Ленивость: Операции на потоках не выполняются до тех пор, пока не будет вызвана терминальная операция. Это позволяет оптимизировать выполнение, объединяя несколько операций в одну.
2. Однократное использование: Поток можно использовать только один раз. Попытка повторно использовать поток приведёт к исключению.
3. Поддержка параллельности: Потоки легко могут быть выполнены параллельно, что позволяет ускорить обработку больших объемов данных.
4. Функциональные операции: Потоки предоставляют методы, такие как
Пример использования:
Почему и когда использовать Streams:
- Упрощение кода: Потоки позволяют сократить количество кода, необходимого для работы с коллекциями, делая его более читаемым и поддерживаемым.
- Повышение производительности: Параллельные потоки (
- Функциональный стиль: Потоки поддерживают функциональный подход, что может быть полезно при написании чистого и модульного кода.
📝 Задание:
Дан список чисел
#задание #интервью
@code_it
Теория:
Streams — это мощный инструмент, введённый в Java 8 для работы с последовательностями данных. Потоки позволяют обрабатывать данные на высоком уровне абстракции, используя функциональные подходы, такие как фильтрация, преобразование и агрегирование.
Основные особенности потоков:
1. Ленивость: Операции на потоках не выполняются до тех пор, пока не будет вызвана терминальная операция. Это позволяет оптимизировать выполнение, объединяя несколько операций в одну.
2. Однократное использование: Поток можно использовать только один раз. Попытка повторно использовать поток приведёт к исключению.
3. Поддержка параллельности: Потоки легко могут быть выполнены параллельно, что позволяет ускорить обработку больших объемов данных.
4. Функциональные операции: Потоки предоставляют методы, такие как
filter, map, reduce, collect, которые позволяют лаконично и эффективно работать с данными.Пример использования:
List<String> names = Arrays.asList("Анна", "Иван", "Петр", "Мария", "Елена");
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("А"))
.collect(Collectors.toList());
filteredNames.forEach(System.out::println);Почему и когда использовать Streams:
- Упрощение кода: Потоки позволяют сократить количество кода, необходимого для работы с коллекциями, делая его более читаемым и поддерживаемым.
- Повышение производительности: Параллельные потоки (
parallelStream) позволяют эффективно использовать многопоточность для ускорения обработки больших данных.- Функциональный стиль: Потоки поддерживают функциональный подход, что может быть полезно при написании чистого и модульного кода.
📝 Задание:
Дан список чисел
List<Integer> numbers. Используя потоки, отфильтруйте все четные числа, затем умножьте каждое из них на 2 и соберите результат в новый список. Напишите метод, который выполнит эту операцию и выведет результат на экран.#задание #интервью
@code_it
1❤2
📚 Потоки (Streams) в Java 8+
Ответ
Задание: Дан список чисел
Решение:
Объяснение:
В этом решении используется поток для обработки списка чисел. Сначала метод
#решения #интервью
@code_it
Ответ
Задание: Дан список чисел
List<Integer> numbers. Используя потоки, отфильтруйте все четные числа, затем умножьте каждое из них на 2 и соберите результат в новый список. Напишите метод, который выполнит эту операцию и выведет результат на экран.Решение:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> result = numbers.stream()
.filter(n -> n % 2 == 0)
.map(n -> n * 2)
.collect(Collectors.toList());
result.forEach(System.out::println);
}
}
Объяснение:
В этом решении используется поток для обработки списка чисел. Сначала метод
filter отбирает только четные числа, затем метод map умножает каждое из них на 2, и наконец, метод collect собирает результаты в новый список. Полученный список выводится на экран с помощью метода forEach.#решения #интервью
@code_it
1
📚 Аннотации в Java
Теория:
Аннотации — это особый вид метаданных, который можно добавлять к элементам кода, таким как классы, методы, поля и другие. Они не изменяют поведения программы, но предоставляют дополнительную информацию, которая может быть использована компилятором, инструментами разработки или фреймворками.
Основные типы аннотаций:
1. Встроенные аннотации:
-
-
-
2. Пользовательские аннотации:
- Создаются с помощью
- Пример создания пользовательской аннотации:
- Пример использования аннотации:
Атрибуты аннотаций:
- @Target: Определяет, к каким элементам кода может быть применена аннотация (например, к методам, полям, классам).
- @Retention: Определяет, будет ли аннотация доступна только в исходном коде, на этапе компиляции или во время выполнения (runtime).
Почему и когда использовать аннотации:
- Документирование кода: Аннотации помогают добавить метаданные, которые улучшают понимание и поддержку кода.
- Интеграция с фреймворками: Аннотации широко используются в популярных фреймворках, таких как Spring или Hibernate, для конфигурации и настройки поведения классов и методов.
- Обеспечение правильности кода: Аннотации, такие как
📝 Задание:
Создайте пользовательскую аннотацию
#задание #интервью
@code_it
Теория:
Аннотации — это особый вид метаданных, который можно добавлять к элементам кода, таким как классы, методы, поля и другие. Они не изменяют поведения программы, но предоставляют дополнительную информацию, которая может быть использована компилятором, инструментами разработки или фреймворками.
Основные типы аннотаций:
1. Встроенные аннотации:
-
@Override: указывает, что метод переопределяет метод суперкласса.-
@Deprecated: помечает метод или класс как устаревший, что указывает разработчикам на необходимость избегать его использования.-
@SuppressWarnings: позволяет подавить определенные предупреждения компилятора.2. Пользовательские аннотации:
- Создаются с помощью
@interface. Вы можете определить собственные аннотации с элементами, которые могут иметь значения по умолчанию.- Пример создания пользовательской аннотации:
@interface Version {
String value();
}
- Пример использования аннотации:
@Version("1.0")
public void myMethod() {
// код метода
}
Атрибуты аннотаций:
- @Target: Определяет, к каким элементам кода может быть применена аннотация (например, к методам, полям, классам).
- @Retention: Определяет, будет ли аннотация доступна только в исходном коде, на этапе компиляции или во время выполнения (runtime).
Почему и когда использовать аннотации:
- Документирование кода: Аннотации помогают добавить метаданные, которые улучшают понимание и поддержку кода.
- Интеграция с фреймворками: Аннотации широко используются в популярных фреймворках, таких как Spring или Hibernate, для конфигурации и настройки поведения классов и методов.
- Обеспечение правильности кода: Аннотации, такие как
@Override, помогают избежать ошибок в коде, сигнализируя компилятору о намерениях разработчика.📝 Задание:
Создайте пользовательскую аннотацию
@Version, которая будет хранить номер версии метода. Аннотируйте три метода в классе MyClass, задав разным методам разные версии (например, "1.0", "2.0" и "3.0"). В основном классе вызовите каждый из этих методов, чтобы показать, что они работают корректно.#задание #интервью
@code_it
1👍3🔥2
📚 Аннотации в Java
🔍 Ответ
Задание: Создайте пользовательскую аннотацию
Решение:
Объяснение:
В этом решении создается пользовательская аннотация
#решения #интервью
@code_it
🔍 Ответ
Задание: Создайте пользовательскую аннотацию
@Version, которая будет хранить номер версии метода. Аннотируйте три метода в классе MyClass, задав разным методам разные версии (например, "1.0", "2.0" и "3.0"). В основном классе вызовите каждый из этих методов, чтобы показать, что они работают корректно.Решение:
// Определяем аннотацию Version
@interface Version {
String value();
}
// Пример использования аннотации в классе MyClass
class MyClass {
@Version("1.0")
public void method1() {
System.out.println("This is version 1.0");
}
@Version("2.0")
public void method2() {
System.out.println("This is version 2.0");
}
@Version("3.0")
public void method3() {
System.out.println("This is version 3.0");
}
}
// Вызов методов
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.method1(); // вызов метода версии 1.0
obj.method2(); // вызов метода версии 2.0
obj.method3(); // вызов метода версии 3.0
}
}
Объяснение:
В этом решении создается пользовательская аннотация
@Version, которая используется для аннотирования методов в классе MyClass. Три метода аннотированы с разными номерами версий — "1.0", "2.0" и "3.0". В основном классе Main вызываются каждый из этих методов, что демонстрирует их работу. Аннотации в данном случае служат для маркировки версий, но не влияют на выполнение программы.#решения #интервью
@code_it
👍1
📚 Enum в Java
Теория:
Enum (перечисления) — это специальный тип данных в Java, который представляет собой набор фиксированных констант. Перечисления обеспечивают способ представления набора связанных значений, таких как дни недели, состояния, команды и другие наборы, где каждый элемент имеет четко определенное количество возможных значений.
Основные особенности enum:
1. Безопасность типов: Enum гарантирует, что переменная может принимать только одно из предопределенных значений, что делает код более безопасным и предотвращает ошибки.
2. Методы и поля: Enum может содержать методы и поля, что позволяет добавлять дополнительную функциональность к перечислениям.
3. Использование в switch: Перечисления часто используются в конструкциях
4. Enum как класс: Каждый элемент enum можно рассматривать как экземпляр класса, что позволяет переопределять методы для отдельных элементов.
Пример использования enum:
Почему и когда использовать Enum:
- Когда набор значений известен заранее: Если вы знаете, что у вас есть фиксированный набор значений, который не изменится, использование enum будет правильным выбором.
- Упрощение работы с кодом: Enum улучшает читаемость и структурированность кода, позволяя работать с ограниченным набором значений в удобной форме.
- Поддержка бизнес-логики: Enum позволяет привязывать данные и методы к константам, что делает его идеальным для работы с бизнес-логикой, связанной с ограниченным набором значений.
📝 Задание:
Создайте enum
#задание #интервью
@code_it
Теория:
Enum (перечисления) — это специальный тип данных в Java, который представляет собой набор фиксированных констант. Перечисления обеспечивают способ представления набора связанных значений, таких как дни недели, состояния, команды и другие наборы, где каждый элемент имеет четко определенное количество возможных значений.
Основные особенности enum:
1. Безопасность типов: Enum гарантирует, что переменная может принимать только одно из предопределенных значений, что делает код более безопасным и предотвращает ошибки.
2. Методы и поля: Enum может содержать методы и поля, что позволяет добавлять дополнительную функциональность к перечислениям.
3. Использование в switch: Перечисления часто используются в конструкциях
switch для удобной обработки различных значений.4. Enum как класс: Каждый элемент enum можно рассматривать как экземпляр класса, что позволяет переопределять методы для отдельных элементов.
Пример использования enum:
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class EnumExample {
public static void main(String[] args) {
Day today = Day.MONDAY;
switch (today) {
case MONDAY:
System.out.println("It's Monday, start of the work week!");
break;
case FRIDAY:
System.out.println("It's Friday, almost weekend!");
break;
default:
System.out.println("It's another day of the week.");
break;
}
}
}Почему и когда использовать Enum:
- Когда набор значений известен заранее: Если вы знаете, что у вас есть фиксированный набор значений, который не изменится, использование enum будет правильным выбором.
- Упрощение работы с кодом: Enum улучшает читаемость и структурированность кода, позволяя работать с ограниченным набором значений в удобной форме.
- Поддержка бизнес-логики: Enum позволяет привязывать данные и методы к константам, что делает его идеальным для работы с бизнес-логикой, связанной с ограниченным набором значений.
📝 Задание:
Создайте enum
TrafficLight с тремя значениями: RED, YELLOW, и GREEN. Добавьте метод String getAction(), который будет возвращать строку с рекомендацией действия (например, для RED — "Stop", для YELLOW — "Prepare to stop", для GREEN — "Go"). В методе main напишите код, который выводит рекомендацию для каждого значения TrafficLight.#задание #интервью
@code_it
1🔥3❤2👍1
📚 Enum в Java
🔍 Ответ
Задание: Создайте enum
Решение:
Объяснение:
В этом решении создается enum
#решения #интервью
@code_it
🔍 Ответ
Задание: Создайте enum
TrafficLight с тремя значениями: RED, YELLOW, и GREEN. Добавьте метод String getAction(), который будет возвращать строку с рекомендацией действия (например, для RED — "Stop", для YELLOW — "Prepare to stop", для GREEN — "Go"). В методе main напишите код, который выводит рекомендацию для каждого значения TrafficLight.Решение:
enum TrafficLight {
RED("Stop"),
YELLOW("Prepare to stop"),
GREEN("Go");
private String action;
TrafficLight(String action) {
this.action = action;
}
public String getAction() {
return action;
}
}
public class TrafficLightExample {
public static void main(String[] args) {
for (TrafficLight light : TrafficLight.values()) {
System.out.println(light + ": " + light.getAction());
}
}
}Объяснение:
В этом решении создается enum
TrafficLight, который содержит три константы: RED, YELLOW, и GREEN. Каждая константа имеет строковое поле action, которое задается через конструктор. Метод getAction() возвращает соответствующее действие для каждого значения светофора. В main методе программа итерируется по всем значениям enum и выводит действие для каждого из них.#решения #интервью
@code_it
1👍4🔥2❤1
Как часто выпускать видео с разбором заданий с собеседований?
Anonymous Poll
33%
Каждый рабочий день
21%
В пятницу сразу с 5 заданиями
38%
2 - 3 задания в неделю
8%
Нафиг задания, даешь REST API
📚 Сериализация и десериализация в Java
Теория:
Сериализация — это процесс преобразования объекта в последовательность байтов для его сохранения в файл, передачи по сети или хранения в памяти для дальнейшего восстановления. Десериализация — это обратный процесс, в котором данные, хранящиеся в виде байтов, преобразуются обратно в объект.
В Java сериализация достигается с помощью интерфейса
Основные особенности сериализации:
1. Serializable интерфейс: Для того чтобы класс был сериализуемым, он должен реализовывать интерфейс
2. transient поля: Поля, отмеченные ключевым словом
3. SerialVersionUID: Это уникальный идентификатор версии класса, используемый при десериализации для проверки совместимости версии класса. Если идентификаторы не совпадают, возникнет исключение
Пример:
Почему и когда использовать сериализацию:
- Сохранение состояния: Сериализация полезна для сохранения состояния объекта между сессиями или для передачи его по сети.
- Кэширование: Объекты могут быть сериализованы и сохранены в кэш для быстрого доступа к ним в будущем.
- Клонирование объектов: Сериализация может использоваться для создания глубоких копий объектов.
📝 Задание:
Создайте класс
#задания #интервью
@code_it
Теория:
Сериализация — это процесс преобразования объекта в последовательность байтов для его сохранения в файл, передачи по сети или хранения в памяти для дальнейшего восстановления. Десериализация — это обратный процесс, в котором данные, хранящиеся в виде байтов, преобразуются обратно в объект.
В Java сериализация достигается с помощью интерфейса
Serializable, который не содержит методов, а лишь помечает класс как сериализуемый. Когда класс реализует этот интерфейс, его объекты могут быть сериализованы.Основные особенности сериализации:
1. Serializable интерфейс: Для того чтобы класс был сериализуемым, он должен реализовывать интерфейс
Serializable. Если объект содержит ссылки на другие объекты, то и эти классы также должны быть сериализуемыми.2. transient поля: Поля, отмеченные ключевым словом
transient, не будут сериализованы. Это полезно, когда вы хотите исключить из сериализации временные или чувствительные данные.3. SerialVersionUID: Это уникальный идентификатор версии класса, используемый при десериализации для проверки совместимости версии класса. Если идентификаторы не совпадают, возникнет исключение
InvalidClassException.Пример:
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
String name;
int age;
transient String password;
Person(String name, int age, String password) {
this.name = name;
this.age = age;
this.password = password;
}
}
Почему и когда использовать сериализацию:
- Сохранение состояния: Сериализация полезна для сохранения состояния объекта между сессиями или для передачи его по сети.
- Кэширование: Объекты могут быть сериализованы и сохранены в кэш для быстрого доступа к ним в будущем.
- Клонирование объектов: Сериализация может использоваться для создания глубоких копий объектов.
📝 Задание:
Создайте класс
Employee, который реализует интерфейс Serializable. В классе должны быть поля name, position и salary. Добавьте метод для сериализации объекта Employee в файл и метод для десериализации объекта из файла. Напишите код, который создает объект Employee, сериализует его в файл, затем десериализует из файла и выводит данные о сотруднике на экран.#задания #интервью
@code_it
1👍3❤2🥰2
📚 Сериализация и десериализация в Java
🔍 День 16: Ответ
Задание: Создайте класс Employee, который реализует интерфейс Serializable. В классе должны быть поля name, position и salary. Добавьте метод для сериализации объекта Employee в файл и метод для десериализации объекта из файла. Напишите код, который создает объект Employee, сериализует его в файл, затем десериализует из файла и выводит данные о сотруднике на экран.
Решение:
Объяснение:
В этом решении создается класс Employee, который реализует интерфейс Serializable. Этот класс включает три поля: name, position и salary. Метод serialize() сохраняет объект в файл, а deserialize() восстанавливает объект из файла. В методе main создается объект Employee, который затем сериализуется и десериализуется, после чего выводится информация о сотруднике.
#решения #интервью
@code_it
🔍 День 16: Ответ
Задание: Создайте класс Employee, который реализует интерфейс Serializable. В классе должны быть поля name, position и salary. Добавьте метод для сериализации объекта Employee в файл и метод для десериализации объекта из файла. Напишите код, который создает объект Employee, сериализует его в файл, затем десериализует из файла и выводит данные о сотруднике на экран.
Решение:
import java.io.*;
class Employee implements Serializable {
private static final long serialVersionUID = 1L;
String name;
String position;
double salary;
Employee(String name, String position, double salary) {
this.name = name;
this.position = position;
this.salary = salary;
}
// Метод для сериализации объекта
public void serialize(String filename) {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
oos.writeObject(this);
} catch (IOException e) {
e.printStackTrace();
}
}
// Метод для десериализации объекта
public static Employee deserialize(String filename) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
return (Employee) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
public class Main {
public static void main(String[] args) {
Employee emp = new Employee("John Doe", "Developer", 75000);
// Сериализация объекта
emp.serialize("employee.ser");
// Десериализация объекта
Employee deserializedEmp = Employee.deserialize("employee.ser");
// Вывод данных о сотруднике
if (deserializedEmp != null) {
System.out.println("Name: " + deserializedEmp.name);
System.out.println("Position: " + deserializedEmp.position);
System.out.println("Salary: " + deserializedEmp.salary);
}
}
}
Объяснение:
В этом решении создается класс Employee, который реализует интерфейс Serializable. Этот класс включает три поля: name, position и salary. Метод serialize() сохраняет объект в файл, а deserialize() восстанавливает объект из файла. В методе main создается объект Employee, который затем сериализуется и десериализуется, после чего выводится информация о сотруднике.
#решения #интервью
@code_it
1🔥4👍2❤1
📚 Многопоточность в Java: Основы работы с
Теория:
Многопоточность — это важная часть программирования на Java, которая позволяет вашему приложению выполнять несколько задач одновременно. Это особенно полезно в задачах, требующих больших вычислительных ресурсов, таких как обработка больших данных или выполнение фоновых операций.
Основной класс для работы с потоками в Java — это класс
Создание и запуск потока:
В Java есть два способа создания потоков:
1. Наследование от класса
Вы можете создать свой класс, который наследуется от
Почему и когда использовать многопоточность:
- Улучшение производительности: Многопоточность позволяет эффективно использовать ресурсы процессора, особенно на многоядерных системах.
- Асинхронные операции: Выполнение задач, таких как ввод-вывод, в отдельных потоках помогает избежать блокировки главного потока и улучшает отзывчивость программы.
- Параллельная обработка данных: Обработка больших объемов данных может быть значительно ускорена с помощью многопоточности.
📝 Задание:
Создайте два потока: один с использованием наследования от класса
#задания #интервью
@code_it
ThreadТеория:
Многопоточность — это важная часть программирования на Java, которая позволяет вашему приложению выполнять несколько задач одновременно. Это особенно полезно в задачах, требующих больших вычислительных ресурсов, таких как обработка больших данных или выполнение фоновых операций.
Основной класс для работы с потоками в Java — это класс
Thread. Каждый поток представляет собой отдельную ветвь выполнения внутри программы.Создание и запуск потока:
В Java есть два способа создания потоков:
1. Наследование от класса
Thread:Вы можете создать свой класс, который наследуется от
Thread, и переопределить метод run(), в котором будет описана логика работы потока.java
java
class MyThread extends Thread {
public void run() {
System.out.println("Thread is running...");
}
}
public class Main {
public static void main(String[] args) {
MyThread t1 = new MyThread();
t1.start(); // Запуск потока
}
}
2. Реализация интерфейса Runnable:
Вместо наследования от Thread, можно реализовать интерфейс Runnable и передать его экземпляр в конструктор класса Thread.
java
java
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable is running...");
}
}
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable());
t1.start(); // Запуск потока
}
}
Почему и когда использовать многопоточность:
- Улучшение производительности: Многопоточность позволяет эффективно использовать ресурсы процессора, особенно на многоядерных системах.
- Асинхронные операции: Выполнение задач, таких как ввод-вывод, в отдельных потоках помогает избежать блокировки главного потока и улучшает отзывчивость программы.
- Параллельная обработка данных: Обработка больших объемов данных может быть значительно ускорена с помощью многопоточности.
📝 Задание:
Создайте два потока: один с использованием наследования от класса
Thread, а второй — с использованием реализации интерфейса Runnable. Каждый поток должен выводить в консоль числа от 1 до 5 с небольшим интервалом между выводами. Убедитесь, что оба потока выполняются параллельно.#задания #интервью
@code_it
1👍4❤1🔥1
📚 Многопоточность в Java: Основы работы с
🔍 Ответ
Задание: Создайте два потока: один с использованием наследования от класса
Решение:
Объяснение:
В этом решении создано два потока: один с использованием наследования от
#решение #интервью
@code_it
Thread🔍 Ответ
Задание: Создайте два потока: один с использованием наследования от класса
Thread, а второй — с использованием реализации интерфейса Runnable. Каждый поток должен выводить в консоль числа от 1 до 5 с небольшим интервалом между выводами. Убедитесь, что оба потока выполняются параллельно.Решение:
class MyThread extends Thread {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println("Thread: " + i);
try {
Thread.sleep(500); // Пауза 500 миллисекунд
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyRunnable implements Runnable {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println("Runnable: " + i);
try {
Thread.sleep(500); // Пауза 500 миллисекунд
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
MyThread t1 = new MyThread();
Thread t2 = new Thread(new MyRunnable());
t1.start();
t2.start();
}
}
Объяснение:
В этом решении создано два потока: один с использованием наследования от
Thread, а второй — с реализацией Runnable. Оба потока выполняют одну и ту же задачу — выводят числа от 1 до 5 с задержкой в 500 миллисекунд между каждым выводом. Потоки запускаются параллельно, что можно наблюдать по их смешанному выводу в консоль.#решение #интервью
@code_it
👍1