Найти тему
Статьи
Паттерны GRASP в Java
GRASP (General Responsibility Assignment Software Patterns) представляет собой набор принципов, которые могут быть полезными при проектировании объектно-ориентированных систем. Вот некоторые плюсы и минусы использования GRASP: Плюсы GRASP: Минусы GRASP: Information Expert (Эксперт информации): Пример: Рассмотрим систему управления заказами. У класса Order может быть метод calculateTotal(), так как этот класс содержит информацию о продуктах и их ценах, и легко может выполнить расчет общей стоимости заказа...
166 читали · 11 месяцев назад
CyclicBarrier в Java
В Java класс CyclicBarrier предоставляет механизм синхронизации, который позволяет группе потоков дождаться друг друга в определенной точке исполнения, прежде чем продолжить выполнение. Он особенно полезен, когда несколько потоков выполняют части задачи и должны синхронизироваться в конечной точке перед тем, как продолжить выполнение. Принцип работы CyclicBarrier заключается в том, что он ожидает, пока все участники (потоки) не достигнут барьера, и только после этого он выполняет заданное действие (заданный Runnable)...
1 год назад
Exchanger в Java: примеры
В Java термин "Exchanger" обычно относится к классу java.util.concurrent.Exchanger, предоставляющему механизм обмена данными между двумя потоками. Этот механизм позволяет двум потокам встретиться в точке обмена и обменяться данными, прежде чем продолжить выполнение. Вот пример использования Exchanger в Java: Этот пример создает два потока: "Producer" и "Consumer", которые обмениваются строковыми данными с использованием Exchanger...
113 читали · 1 год назад
Semaphore в Java: пример
В Java существует класс Semaphore, который предоставляет механизм управления доступом к ресурсам. Семафоры часто используются для ограничения количества потоков, которые могут одновременно получить доступ к определенным ресурсам или выполнить определенный участок кода. Пример использования Semaphore в Java: В этом примере создается семафор с начальным числом разрешений равным 2. Затем создаются...
1 год назад
Java Обратока исключений
Обработка исключений в Java включает в себя использование механизма исключений для обработки ошибок и непредвиденных ситуаций в программах. Исключения в Java представляются объектами, которые наследуются от класса java.lang.Throwable. Все исключения делятся на два основных типа: проверяемые (checked) исключения и непроверяемые (unchecked) исключения. Иерархия классов Throwable: Примеры обработки исключений в Java: 1. Непроверяемые исключения (RuntimeException): 2. Проверяемые исключения (IOException):...
1 год назад
SOLID в Java: принципы
SOLID - это акроним, обозначающий пять основных принципов объектно-ориентированного программирования и проектирования, предложенных Робертом Мартином. Эти принципы направлены на создание гибкого, поддерживаемого и расширяемого кода. Давайте рассмотрим каждый из принципов SOLID и приведем примеры на языке Java. 1. Принцип единственной ответственности (Single Responsibility Principle - SRP): Класс должен иметь только одну причину для изменения. Пример: 2. Принцип открытости/закрытости (Open/Closed...
367 читали · 1 год назад
Многозадачность в Java: Освоение Callable для эффективного параллельного программирования
Callable в Java - это интерфейс, введенный в пакете java.util.concurrent, который предоставляет возможность возвращать результат и бросать исключение из параллельно выполняемой задачи. Он используется вместе с ExecutorService для выполнения задач в фоновом режиме и получения их результата. Основные особенности и методы интерфейса Callable: 1. Метод call(): Основной метод интерфейса. Представляет собой задачу, которая выполняется в фоновом режиме. Возвращает результат выполнения задачи. Может бросать исключение...
1 год назад
Глубокий взгляд внутрь Executor в Java: Работа ThreadPoolExecutor и Управление Потоками
В Java интерфейс Executor является частью пакета java.util.concurrent, предоставляющего удобные средства для работы с параллелизмом и асинхронным выполнением задач. Executor является простым интерфейсом, предназначенным для выполнения задач в фоновом режиме. Он определен следующим образом: Executor предоставляет всего один метод execute, который принимает объект типа Runnable и выполняет его асинхронно в некотором потоке. Объект Runnable представляет собой задачу, которую нужно выполнить. Один из наиболее распространенных классов, реализующих интерфейс Executor, это ThreadPoolExecutor...
1 год назад
Java: Терминальные и нетерминальыне операции со стримами, почему они ленивые
В Java стримы представляют собой новый функциональный интерфейс, предназначенный для работы с последовательностями элементов. Стримы позволяют выполнять различные операции (такие как фильтрация, отображение, сортировка и другие) над элементами последовательности. Операции над стримами можно разделить на терминальные и нетерминальные. Терминальные операции: Терминальные операции - это операции, которые завершают обработку стрима, возвращая результат или выполняя побочные эффекты. После выполнения терминальной операции нельзя продолжить работу с тем же стримом...
152 читали · 1 год назад
Индексы в бд, что из себя представляют, где использовать, плюсы и минусы
Индексы – это структуры данных, создаваемые для ускорения операций поиска, сортировки и фильтрации данных в базе данных. Они позволяют значительно повысить производительность запросов за счет ускорения доступа к данным. Давайте рассмотрим основные аспекты индексов: Типы индексов: Где использовать индексы: Плюсы индексов: Минусы индексов: Рекомендации по использованию: Используйте индексы тщательно, с учетом особенностей вашей базы данных и требований вашего приложения. Оптимальная стратегия индексации зависит от конкретного контекста использования...
216 читали · 1 год назад
Java: CountDownLatch и с чем его едят
CountDownLatch - это синхронизационный механизм, предоставляемый Java в пакете java.util.concurrent, который позволяет одному или нескольким потокам ждать, пока другие потоки завершат выполнение своих задач. Принцип работы CountDownLatch заключается в том, что вы создаете объект CountDownLatch с определенным счетчиком, который инициализируется при создании. Затем один или несколько потоков могут уменьшать этот счетчик, вызывая метод countDown()...
147 читали · 1 год назад
Паттерны интеграции микросервисов
Интеграция микросервисов - это ключевой аспект успешной архитектуры микросервисов. Существует несколько паттернов интеграции микросервисов, которые помогают обеспечить эффективное взаимодействие между сервисами. Вот несколько распространенных паттернов:
330 читали · 1 год назад