Многопоточность в Java
В Java многопоточность реализована через класс
🟣 1. Создание и запуск потока
Поток может быть создан двумя способами:
Наследование от класса Thread:
Реализация интерфейса
🟣 2. Основные методы класса
-
-
-
-
-
🟣 3. Синхронизация
- Чтобы избежать проблем с конкурентным доступом к данным, используется синхронизация:
Это гарантирует, что только один поток может выполнить код внутри синхронизированного блока.
🟣 4. Пул потоков
- Для управления большим количеством потоков используется пул потоков, который управляется через
🟣 5. Состояния потока
Потоки могут находиться в разных состояниях:
- NEW: Поток создан, но не запущен.
- RUNNABLE: Поток готов к выполнению.
- WAITING: Поток ожидает другого потока.
- TIMED_WAITING: Поток ожидает в течение определенного времени.
- TERMINATED: Поток завершен.
🟣 6. Проблемы многопоточности
- Состояние гонки (Race condition) — ситуация, когда несколько потоков одновременно пытаются изменить данные, что может привести к некорректным результатам.
- Блокировки — проблемы с мертвыми блокировками (deadlocks), когда потоки навсегда блокируются, ожидая друг друга.
🟣 7. Современные подходы и классы
-
-
🟣 8. Параллельное выполнение коллекций
Коллекции в Java также могут работать с потоками через
Многопоточность — мощный инструмент для улучшения производительности приложений, но требует внимательности при реализации, чтобы избежать ошибок, таких как мертвые блокировки или некорректный доступ к данным.
👉 Java Portal | дать буст
В Java многопоточность реализована через класс
Thread
и интерфейс Runnable
. Вот основные моменты, которые могут быть полезны при работе с многопоточностью:Поток может быть создан двумя способами:
Наследование от класса Thread:
class MyThread extends Thread {
public void run() {
// Код, выполняемый в потоке
}
}
MyThread t = new MyThread();
t.start();
Реализация интерфейса
Runnable
:
class MyRunnable implements Runnable {
public void run() {
// Код, выполняемый в потоке
}
}
Thread t = new Thread(new MyRunnable());
t.start();
Thread
-
start()
— запуск потока.-
sleep(long millis)
— приостановка потока на определенное время.-
join()
— ожидание завершения потока.-
interrupt()
— прерывание потока.-
isAlive()
— проверка, работает ли поток.- Чтобы избежать проблем с конкурентным доступом к данным, используется синхронизация:
synchronized (this) {
// Критическая секция
}
Это гарантирует, что только один поток может выполнить код внутри синхронизированного блока.
- Для управления большим количеством потоков используется пул потоков, который управляется через
ExecutorService
. Пример:
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> {
// Задача для потока
});
executor.shutdown();
Потоки могут находиться в разных состояниях:
- NEW: Поток создан, но не запущен.
- RUNNABLE: Поток готов к выполнению.
- WAITING: Поток ожидает другого потока.
- TIMED_WAITING: Поток ожидает в течение определенного времени.
- TERMINATED: Поток завершен.
- Состояние гонки (Race condition) — ситуация, когда несколько потоков одновременно пытаются изменить данные, что может привести к некорректным результатам.
- Блокировки — проблемы с мертвыми блокировками (deadlocks), когда потоки навсегда блокируются, ожидая друг друга.
-
ForkJoinPool
— используется для параллельного выполнения задач с разделением на подзадачи.-
CountDownLatch
, CyclicBarrier
, Semaphore
— различные утилиты для синхронизации между потоками.Коллекции в Java также могут работать с потоками через
parallelStream()
:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.parallelStream().forEach(System.out::println);
Многопоточность — мощный инструмент для улучшения производительности приложений, но требует внимательности при реализации, чтобы избежать ошибок, таких как мертвые блокировки или некорректный доступ к данным.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍11🔥3🏆1
Media is too big
VIEW IN TELEGRAM
Хеш-таблица — Самая Популярная Структура Данных
Разбираем как работает HashSet - структура данных, которая позволяет проверять в ней наличие любого элемента за О(1) времени.
Затем модифицируем ее так, чтобы получить хеш-таблицу, то есть структуру данных, хранящую пары ключ-значение.
📲 Cмотреть источник: тут
👉 Java Portal | #видео
Разбираем как работает HashSet - структура данных, которая позволяет проверять в ней наличие любого элемента за О(1) времени.
Затем модифицируем ее так, чтобы получить хеш-таблицу, то есть структуру данных, хранящую пары ключ-значение.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2🌚1
This media is not supported in your browser
VIEW IN TELEGRAM
IntelliJ IDEA поддерживает JSONPath. 👩💻
Вы можете выполнять оценку выражений JSONPath, а также использовать Language Injection для получения форматирования кода и автодополнения внутри строки JSONPath.
👉 Java Portal | дать буст
Вы можете выполнять оценку выражений JSONPath, а также использовать Language Injection для получения форматирования кода и автодополнения внутри строки JSONPath.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣18🔥10🤔5👍3❤1
Media is too big
VIEW IN TELEGRAM
Тестирование на JAVA (JUNIT, MOCKITO)
Видео объясняет, как писать тесты для Java-программ с использованием JUnit для тестирования и Mockito для мокирования объектов.
📲 Cмотреть источник: тут
👉 Java Portal | #видео
Видео объясняет, как писать тесты для Java-программ с использованием JUnit для тестирования и Mockito для мокирования объектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤2🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Полезный инструмент для работы с JSON
JSON-файлы с высокой вложенностью часто сложно прочитать.
JsonCrack создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML форматы.
Знал о таком?)🌠
⛓ Ссылка: тык
👉 Java Portal | дать буст
JSON-файлы с высокой вложенностью часто сложно прочитать.
JsonCrack создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML форматы.
Знал о таком?)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4
image_2025-01-25_13-02-48.png
118.9 KB
Шпаргалка посвящена концепциям объектно-ориентированного программирования (ООП) в языке Java.
Она охватывает четыре основные концепции:
🍩 Наследование (Inheritance) - использование ключевого слова extends для наследования свойств от родительского класса и расширения функционала дочерним классом.
🍩 Абстракция (Abstraction) - создание абстрактных классов и интерфейсов, где определяются только идеи, а реализация предоставляется в дочерних классах.
🍩 Полиморфизм (Polymorphism) - способность объектов принимать разные формы, например, через перегрузку методов или переопределение.
🍩 Инкапсуляция (Encapsulation) - скрытие внутренней реализации класса и доступ к данным через публичные методы (геттеры и сеттеры).
Каждая концепция сопровождается примерами кода.😨
👉 Java Portal | #ресурсы
Она охватывает четыре основные концепции:
Каждая концепция сопровождается примерами кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍7❤3😁1
Media is too big
VIEW IN TELEGRAM
Простой Telegram-бот на Java и Spring Boot
В данном видеоуроке я показываю как можно разработать свой собственный Telegram-бот на Java с использованием Spring Boot. После просмотра данного видео, вы сможете создать свой собственный Telegram-бот, но уже с более сложным функционалом.
📲 Cмотреть источник: тут
👉 Java Portal | #видео
В данном видеоуроке я показываю как можно разработать свой собственный Telegram-бот на Java с использованием Spring Boot. После просмотра данного видео, вы сможете создать свой собственный Telegram-бот, но уже с более сложным функционалом.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥4👍2
dac10c60ec5d2fe6bd3d3f8736cf0ce0.pdf
2.4 MB
На схеме показано, как отлаживать проблемы в Kubernetes:
🍩 Проверяешь Pods (запускаются ли они, готовы ли).
🍩 Ищешь ошибки (CrashLoopBackOff, проблемы с образом, пробами и т.д.).
🍩 Проверяешь Service и Ingress (доступны ли эндпоинты, настроены ли порты).
🍩 Пошагово исправляешь проблемы командой kubectl.
Цель — сделать приложение доступным.
👉 Java Portal | дать буст
Цель — сделать приложение доступным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
Методы списка в Java кратко.
add() – добавляет элемент в список.
get(index) – возвращает элемент по индексу.
indexOf(element) – находит индекс элемента.
remove(element) – удаляет элемент из списка.
clear() – очищает список.
size() – возвращает размер списка.
isEmpty() – проверяет, пуст ли список.
contains(element) – проверяет, есть ли элемент в списке.
reverse() – переворачивает порядок элементов
👉 Java Portal | дать буст
add() – добавляет элемент в список.
get(index) – возвращает элемент по индексу.
indexOf(element) – находит индекс элемента.
remove(element) – удаляет элемент из списка.
clear() – очищает список.
size() – возвращает размер списка.
isEmpty() – проверяет, пуст ли список.
contains(element) – проверяет, есть ли элемент в списке.
reverse() – переворачивает порядок элементов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26😁18🔥6❤2
Принципы проектирования программного обеспечения 👇
[1.] KISS (Keep It Simple, Stupid)
▶ Программное обеспечение должно быть максимально простым.
▶ Используйте понятный и лаконичный код, избегайте излишней сложности и сосредотачивайтесь на основных функциях.
[2.] DRY (Don't Repeat Yourself)
▶ Код не должен дублироваться.
▶ Используйте функции и классы для объединения общего кода.
▶ Применяйте переменные и константы для хранения значений, которые используются в нескольких местах.
[3.] YAGNI (You Ain't Gonna Need It)
▶ Не добавляйте в программное обеспечение функции, которые не нужны.
▶ Поддерживайте простоту и удобство сопровождения.
[4.] SOLID
▶ Принцип единственной ответственности – класс должен выполнять только одну задачу.
▶ Принцип открытости/закрытости – классы должны быть открыты для расширения, но закрыты для изменения.
▶ Принцип подстановки Барбары Лисков – объекты дочернего класса должны заменять объекты базового класса без нарушения функциональности.
▶ Принцип разделения интерфейса – клиенты не должны зависеть от методов, которые они не используют.
▶ Принцип инверсии зависимостей – зависимости должны внедряться в класс, а не быть жёстко закодированными.
[5.] Принцип наименьшего удивления**
▶ Разрабатывайте программное обеспечение так, чтобы оно соответствовало ожиданиям пользователя.
▶ Используйте знакомую терминологию и соглашения, предоставляйте понятные инструкции.
▶ Применяйте четкие и лаконичные сообщения об ошибках.
[6.] Принцип модульности**
▶ Проектируйте программное обеспечение как набор независимых модулей.
▶ Это упрощает понимание, сопровождение и тестирование кода.
[7.] Принцип абстракции
▶ Скрывайте детали реализации от пользователя.
▶ Это делает программное обеспечение более понятным и удобным.
[8.] Принцип инкапсуляции
▶ Программное обеспечение должно скрывать внутреннее состояние объекта от внешнего мира.
▶ Это повышает устойчивость и удобство сопровождения.
[9.] Принцип наименьшего знания
▶ Проектируйте программное обеспечение так, чтобы минимизировать объем знаний модуля о других модулях.
▶ Это помогает повысить модульность и гибкость системы.
[10.] Принцип низкой связности и высокой когезии
▶ Связность – это степень зависимости элементов модуля друг от друга.
▶ Модуль с низкой связностью имеет мало зависимостей, и его элементы слабо зависят друг от друга.
❗ Когезия – это степень, с которой элементы модуля относятся к одной цели.
▶ Модуль с высокой когезией имеет одну четко определенную задачу, и все его элементы связаны с её выполнением.
👉 Java Portal | дать буст
[1.] KISS (Keep It Simple, Stupid)
[2.] DRY (Don't Repeat Yourself)
[3.] YAGNI (You Ain't Gonna Need It)
[4.] SOLID
[5.] Принцип наименьшего удивления**
[6.] Принцип модульности**
[7.] Принцип абстракции
[8.] Принцип инкапсуляции
[9.] Принцип наименьшего знания
[10.] Принцип низкой связности и высокой когезии
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4