Блокирующий метод
Блокирующий метод — это метод, который временно останавливает выполнение текущего потока до завершения определенного условия или операции. Блокирующие методы часто используются для синхронизации работы потоков или для ожидания определенных условий.
Существует несколько способов сделать метод блокирующим. Один из способов — это использовать ключевое слово
Метод на картинке блокирует объект, на котором он вызывается, до тех пор, пока он не завершит свою работу.
#для_начинающих
Блокирующий метод — это метод, который временно останавливает выполнение текущего потока до завершения определенного условия или операции. Блокирующие методы часто используются для синхронизации работы потоков или для ожидания определенных условий.
Существует несколько способов сделать метод блокирующим. Один из способов — это использовать ключевое слово
synchronized. Метод, помеченный ключевым словом synchronized, блокирует объект, на котором он вызывается. Это означает, что ни один другой поток не может вызвать этот метод, пока он не будет завершен.Метод на картинке блокирует объект, на котором он вызывается, до тех пор, пока он не завершит свою работу.
#для_начинающих
👍16
Класс java.io.OutputStream
Класс
Основные характеристики:
— Абстрактный класс, поэтому нельзя напрямую создавать его объекты.
— Представляет собой поток последовательных байтов.
— Предоставляет методы для записи байтов в это хранилище.
— Не гарантирует сохранения порядка байтов при записи.
— Не закрывает автоматически хранилище при окончании записи.
Основные методы:
—
—
—
—
—
#для_начинающих
Класс
java.io.OutputStream является абстрактным суперклассом для всех классов, представляющих выходной поток байтов в Java. Он входит в состав пакета java.io и отвечает за отправку байтов данных в определенное хранилище (sink).Основные характеристики:
— Абстрактный класс, поэтому нельзя напрямую создавать его объекты.
— Представляет собой поток последовательных байтов.
— Предоставляет методы для записи байтов в это хранилище.
— Не гарантирует сохранения порядка байтов при записи.
— Не закрывает автоматически хранилище при окончании записи.
Основные методы:
—
write(byte b): записывает один байт в поток.—
write(byte[] b): записывает массив байтов в поток.—
write(byte[] b, int off, int len): записывает часть массива байтов в поток.—
flush(): сбрасывает буфер потока, принудительно отправляя данные в хранилище.—
close(): закрывает поток и освобождает ресурсы.#для_начинающих
👍10
BeanPostProcessor
#для_продвинутых
BeanPostProcessor — это интерфейс в Spring Framework, который позволяет разработчикам расширять логику создания бинов. BeanPostProcessors вызываются после того, как бин был создан и проинициализирован, но до того, как он будет зарегистрирован в контейнере Spring.BeanPostProcessors имеют два метода обратного вызова:postProcessBeforeInitialization(Object bean, String beanName): вызывается перед тем, как будет вызван метод init() бина.postProcessAfterInitialization(Object bean, String beanName): вызывается после того, как будет вызван метод init() бина.#для_продвинутых
👍16
Каким термином лучше всего описать отношение между классами Department и Employee:
Anonymous Quiz
20%
Ассоциация
34%
Композиция
33%
Агрегация
12%
Ни один из перечисленных ответов
👍17❤2
#Вопросы_с_собеседования
Как поведёт себя уже инстанциированный итератор для collection, если вызвать collection.remove()?
При следующем вызове методов итератора будет выброшено
Как поведёт себя уже инстанциированный итератор для collection, если вызвать collection.remove()?
При следующем вызове методов итератора будет выброшено
ConcurrentModificationException.👍17
Что будет, если скомпилировать и выполнить этот код?
Anonymous Quiz
27%
В консоль будет выведено "Hello"
40%
NullPointerException
9%
Код выполнится без ошибок, но и в консоль ничего не будет выведено
17%
Ошибка во время компиляции
7%
Узнать ответ
👍20❤3
Метод
Метод
-1, если первое значение меньше второго
0, если оба значения равны
1, если первое значение больше второго
#для_начинающих
Double.compare()Метод
Double.compare() является более точным способом сравнения значений типа double, чем операторы == или !=. Это связано с тем, что числа с плавающей точкой могут быть не точными. Метод Double.compare() используется для сравнения двух значений типа double. Он возвращает целое число, указывающее на отношение между двумя значениями:-1, если первое значение меньше второго
0, если оба значения равны
1, если первое значение больше второго
#для_начинающих
👍21
Найдите ошибку в коде
Ошибка в том, что оператор try не имеет соответствующего оператора catch. Оператор try используется для обработки исключений, но в этом случае он не обрабатывает ни одного исключения. Поэтому при возникновении исключения в блоке try будет получена ошибка:
Error:(2, 13) java: exception handling mismatch
Чтобы исправить ошибку, необходимо добавить оператор catch для обработки исключения.
После исправления ошибки код будет компилироваться и выполняться без ошибок.
#для_начинающих
Error:(2, 13) java: exception handling mismatch
Чтобы исправить ошибку, необходимо добавить оператор catch для обработки исключения.
После исправления ошибки код будет компилироваться и выполняться без ошибок.
#для_начинающих
😁21👍8❤3
Метод executeQuery()
Метод
Синтаксис метода
Аргумент
#для_продвинутых
Метод
executeQuery() в Java используется для выполнения запросов на выбор данных из базы данных. Он возвращает объект ResultSet, который представляет набор данных, возвращаемый запросом.Синтаксис метода
executeQuery() следующий:public ResultSet executeQuery(String sql) throws SQLException;
Аргумент
sql представляет собой строку, содержащую SQL-запрос. Возвращаемое значение метода executeQuery() — это объект ResultSet, который представляет собой набор данных, возвращаемый запросом. Объект ResultSet содержит информацию о столбцах данных, содержащихся в наборе данных, а также данные из каждого столбца.#для_продвинутых
👍17
Аннотация
Аннотация
Чтобы класс был объявлен сущностью, необходимо добавить к нему аннотацию
#для_продвинутых
@EntityАннотация
@Entity используется в Java для обозначения класса, который является сущностью. Сущность — это объект, который представляет собой строку данных в базе данных.Чтобы класс был объявлен сущностью, необходимо добавить к нему аннотацию
@Entity. Аннотация @Entity сообщает фреймворку JPA, что класс Customer является сущностью и должен быть сохранен в базе данных.#для_продвинутых
👍23❤2
Маркер Remote
Маркер удаленности — это модификатор доступа, используемый для обозначения класса, интерфейса или метода как доступного только для удаленных объектов. Это означает, что объекты этого типа могут быть доступны только через удаленный вызов процедуры (RPC).
Класс
Чтобы вызвать метод удаленного класса, необходимо использовать класс
#для_продвинутых
Маркер удаленности — это модификатор доступа, используемый для обозначения класса, интерфейса или метода как доступного только для удаленных объектов. Это означает, что объекты этого типа могут быть доступны только через удаленный вызов процедуры (RPC).
Класс
MyRemoteClass теперь является удаленным классом, и его методы могут вызываться только удаленными объектами.Чтобы вызвать метод удаленного класса, необходимо использовать класс
RemoteStub. RemoteStub предоставляет набор методов для вызова методов удаленных классов.#для_продвинутых
👍13
StampedLock
— Обычный режим (READ): в этом режиме несколько потоков могут одновременно читать данные, защищенные блокировкой.
— Редактирование (WRITE): в этом режиме только один поток может получить доступ к данным для редактирования.
— Оптимистическая блокировка (OPTIMISTIC): в этом режиме поток может получить доступ к данным для чтения, не блокируя другие потоки. Если данные были изменены другим потоком до того, как поток закончил чтение, поток получит ошибку.
#для_продвинутых
StampedLock — это механизм блокировки, представленный в Java 8. Он отличается от других механизмов блокировки, таких как synchronized и ReentrantLock, тем, что использует концепцию меток. Метка — это целое число, которое используется для отслеживания состояния блокировки.StampedLock поддерживает три режима блокировки:— Обычный режим (READ): в этом режиме несколько потоков могут одновременно читать данные, защищенные блокировкой.
— Редактирование (WRITE): в этом режиме только один поток может получить доступ к данным для редактирования.
— Оптимистическая блокировка (OPTIMISTIC): в этом режиме поток может получить доступ к данным для чтения, не блокируя другие потоки. Если данные были изменены другим потоком до того, как поток закончил чтение, поток получит ошибку.
#для_продвинутых
👍17
LongAdder
LongAdder можно использовать в следующих случаях:
— Для хранения счетчиков, которые часто обновляются несколькими потоками.
— Для реализации распределенных счетчиков, которые могут быть обновлены из любого места в сети.
— Для реализации распределенных хэш-таблиц, в которых значение хэша может быть обновлено несколькими потоками.
#для_продвинутых
LongAdder — это класс атомарных long-значений в Java, который предназначен для повышения производительности в многопоточных приложениях при частом изменении значения.LongAdder работает следующим образом: он хранит несколько переменных, каждая из которых может быть обновлена одновременно без блокировки. Когда несколько потоков пытаются обновить одно и то же значение, они распределены по этим переменным. Это позволяет снизить конкуренцию между потоками и повысить производительность.LongAdder можно использовать в следующих случаях:
— Для хранения счетчиков, которые часто обновляются несколькими потоками.
— Для реализации распределенных счетчиков, которые могут быть обновлены из любого места в сети.
— Для реализации распределенных хэш-таблиц, в которых значение хэша может быть обновлено несколькими потоками.
#для_продвинутых
👍21
IoC (Inversion of Control)
IoC (Inversion of Control) — это паттерн проектирования, который определяет, что объекты должны зависеть от абстракций, а не от конкретных реализаций, и что объекты должны быть созданы и настроены вне зависимых классов.
В Java IoC часто реализуется с помощью контейнера внедрения зависимостей (Dependency Injection Container, DI container). Контейнер
В примере на картинке мы используем аннотацию
#для_продвинутых
IoC (Inversion of Control) — это паттерн проектирования, который определяет, что объекты должны зависеть от абстракций, а не от конкретных реализаций, и что объекты должны быть созданы и настроены вне зависимых классов.
В Java IoC часто реализуется с помощью контейнера внедрения зависимостей (Dependency Injection Container, DI container). Контейнер
DI отвечает за создание, настройку и предоставление объектов зависимым классам.В примере на картинке мы используем аннотацию
@Autowired для указания контейнеру DI, что класс UserService зависит от объекта Database. Контейнер DI создаст объект Database и присвоит его полю database класса UserService.#для_продвинутых
👍16
SingleThreadPoolExecutor
SingleThreadPoolExecutor имеет следующие конструкторы:
SingleThreadPoolExecutor имеет следующие методы:
#для_продвинутых
SingleThreadPoolExecutor — это класс из пакета java.util.concurrent, который представляет собой пул потоков с одним потоком. Это означает, что все задачи, которые выполняются в этом пуле, выполняются в одном и том же потоке.SingleThreadPoolExecutor имеет следующие конструкторы:
SingleThreadPoolExecutor(int corePoolSize) — создает пул с заданным количеством ядер процессора.SingleThreadPoolExecutor(int corePoolSize, long keepAliveTime, TimeUnit unit) — создает пул с заданным количеством ядер процессора, а также временем ожидания перед уничтожением незадействованных потоков.SingleThreadPoolExecutor имеет следующие методы:
execute(Runnable task) — выполняет указанную задачу в пуле.submit(Runnable task) — выполняет указанную задачу в пуле и возвращает Future, который можно использовать для получения результата выполнения задачи.shutdown() — останавливает пул и ждет, пока все задачи не будут выполнены.#для_продвинутых
👍11😢2
Дорогие подписчики, поздравляю вас с наступающим, а кого-то уже и с наступившим Новом Годом! Пусть 2024 станет для вас чем-то особенным и незабываемым.
🎄56❤5👍4🔥4