Что такое «пул потоков»?
Создание потока является затратной по времени и ресурсам операцией. Количество потоков, которое может быть запущено в рамках одного процесса также ограниченно. Чтобы избежать этих проблем и в целом управлять множеством потоков более эффективно в
Начиная с
•
•
•
•
•
•
... и другие.
Методы
•
•
•
•
•
•
•
•
•
Создание потока является затратной по времени и ресурсам операцией. Количество потоков, которое может быть запущено в рамках одного процесса также ограниченно. Чтобы избежать этих проблем и в целом управлять множеством потоков более эффективно в
Java был реализован механизм пула потоков (thread pool), который создаётся во время запуска приложения и в дальнейшем потоки для обработки запросов берутся и переиспользуются уже из него. Таким образом, появляется возможность не терять потоки, сбалансировать приложение по количеству потоков и частоте их создания.Начиная с
Java 1.5 Java API предоставляет фреймворк Executor, который позволяет создавать различные типы пула потоков:•
Executor - упрощенный интерфейс пула, содержит один метод для передачи задачи на выполнение;•
ExecutorService - расширенный интерфейс пула, с возможностью завершения всех потоков;•
AbstractExecutorService - базовый класс пула, реализующий интерфейс ExecutorService;•
Executors - фабрика объектов связанных с пулом потоков, в том числе позволяет создать основные типы пулов;•
ThreadPoolExecutor - пул потоков с гибкой настройкой, может служить базовым классом для нестандартных пулов;•
ForkJoinPool - пул для выполнения задач типа ForkJoinTask;... и другие.
Методы
Executors для создания пулов:•
newCachedThreadPool() - если есть свободный поток, то задача выполняется в нем, иначе добавляется новый поток в пул. Потоки не используемые больше минуты завершаются и удалются и кэша. Размер пула неограничен. Предназначен для выполнения множество небольших асинхронных задач;•
newCachedThreadPool(ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков;•
newFixedThreadPool(int nThreads) - создает пул на указанное число потоков. Если новые задачи добавлены, когда все потоки активны, то они будут сохранены в очереди для выполнения позже. Если один из потоков завершился из-за ошибки, на его место будет запущен другой поток. Потоки живут до тех пор, пока пул не будет закрыт явно методом shutdown().•
newFixedThreadPool(int nThreads, ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков;•
newSingleThreadScheduledExecutor() - однопотоковый пул с возможностью выполнять задачу через указанное время или выполнять периодически. Если поток был завершен из-за каких-либо ошибок, то для выполнения следующей задачи будет создан новый поток.•
newSingleThreadScheduledExecutor(ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков;•
newScheduledThreadPool(int corePoolSize) - пул для выполнения задач через указанное время или переодически;•
newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков;•
unconfigurableExecutorService(ExecutorService executor) - обертка на пул, запрещающая изменять его конфигурацию;👍11
Azure Event Hubs и Java – потоковая обработка больших данных
Azure Event Hubs – это большая часть платформы облачных сервисов Microsoft, предоставляющая решение для потоковой обработки больших объемов данных. Сегодня мы кратко рассмотрим, как Java разработчики могут использовать Event Hubs в своих проектах.
Давайте рассмотрим Github репозиторий Microsoft с SDK для работы с Azure Event Hubs на Java.
1. Подключение к Event Hubs: Вы можете использовать EventHubProducerClient для отправки событий и EventHubConsumerClient для получения событий. Вам нужно будет предоставить строку подключения и имя вашего Event Hub.
2. Отправка событий: Метод send позволяет отправить одно событие или пакет событий.
3. Получение событий: Создайте EventProcessorClient для обработки входящих событий. Вам нужно будет реализовать ProcessEvent и ProcessError методы.
Пример кода из репозитория демонстрирует базовые операции с Azure Event Hubs на Java. Он поможет вам понять, как использовать эту технологию в своих проектах.
Более подробную информацию можно найти в официальной документации Microsoft.
Потоковая обработка данных является критически важной для многих предприятий, и Azure Event Hubs предоставляет мощный инструмент для эффективного управления этими данными. Будьте готовы к облачной эре с Azure!
Azure Event Hubs – это большая часть платформы облачных сервисов Microsoft, предоставляющая решение для потоковой обработки больших объемов данных. Сегодня мы кратко рассмотрим, как Java разработчики могут использовать Event Hubs в своих проектах.
Давайте рассмотрим Github репозиторий Microsoft с SDK для работы с Azure Event Hubs на Java.
1. Подключение к Event Hubs: Вы можете использовать EventHubProducerClient для отправки событий и EventHubConsumerClient для получения событий. Вам нужно будет предоставить строку подключения и имя вашего Event Hub.
2. Отправка событий: Метод send позволяет отправить одно событие или пакет событий.
3. Получение событий: Создайте EventProcessorClient для обработки входящих событий. Вам нужно будет реализовать ProcessEvent и ProcessError методы.
Пример кода из репозитория демонстрирует базовые операции с Azure Event Hubs на Java. Он поможет вам понять, как использовать эту технологию в своих проектах.
Более подробную информацию можно найти в официальной документации Microsoft.
Потоковая обработка данных является критически важной для многих предприятий, и Azure Event Hubs предоставляет мощный инструмент для эффективного управления этими данными. Будьте готовы к облачной эре с Azure!
👍5
Укажите результат выполнения следующего фрагмента кода: int a = 5, b = 6; a = b++; System.out.println(a);
Anonymous Quiz
12%
будет выдано сообщение об ошибке
9%
5
45%
6
32%
7
3%
ничего из перечисленного
👍12😱3
POJO
Термин
В этом примере класс
Термин
POJO означает Plain Old Java Object, что переводится как "простой старый Java-объект". POJO - это обычный Java-класс, который не зависит от каких-либо фреймворков или библиотек и не имеет особых ограничений или требований к своей структуре.POJO классы часто используются в различных контекстах, таких как модель данных, передача данных или DTO (Data Transfer Object). Они служат для хранения данных и обеспечивают доступ к этим данным через геттеры и сеттеры.В этом примере класс
Person имеет два приватных поля name и age, а также соответствующие геттеры и сеттеры для доступа к этим полям. Геттеры используются для получения значений полей, а сеттеры - для установки новых значений.👍9❤4
Что такое аргумент метода?
Anonymous Quiz
3%
переменная, в которую записывается результат работы метода
82%
значение или переменная, передаваемая в метод для участия в его работе
3%
значение, указываемое после ключевого слова "return"
4%
любая переменная, участвующая в работе метода
8%
переменная, объявленная в теле метода
👍21
Что такое FutureTask?
FutureTask представляет собой отменяемое асинхронное вычисление в параллельном Java приложении. Этот класс предоставляет базовую реализацию Future, с методами для запуска и остановки вычисления, методами для запроса состояния вычисления и извлечения результатов. Результат может быть получен только когда вычисление завершено, метод получения будет заблокирован, если вычисление ещё не завершено. Объекты FutureTask могут быть использованы для обёртки объектов Callable и Runnable. Так как FutureTask реализует Runnable, его можно передать в Executor на выполнение.👍13
👍8😢2
#Вопросы_с_собеседования
В чем разница между Thread.sleep() и Thread.yield()?
В чем разница между Thread.sleep() и Thread.yield()?
Thread.sleep(): Этот метод приостанавливает выполнение текущего потока на заданное количество времени. Время задается в миллисекундах и указывается в качестве аргумента метода. При вызове Thread.sleep(), поток переходит в состояние ожидания и не выполняет код в течение указанного периода времени. После истечения времени поток снова становится готовым к выполнению. Вызов Thread.sleep() может сгенерировать исключение InterruptedException, поэтому необходимо обрабатывать его или пробрасывать.Thread.yield(): Этот метод предоставляет намек планировщику потоков на то, что поток, вызвавший yield(), готов уступить процессорное время другим потокам с тем же приоритетом. Однако это рекомендация, а не гарантия. Вызов Thread.yield() приводит к тому, что текущий поток переходит из исполняемого в состояние готовности, чтобы другие потоки могли получить доступ к процессору. Однако, если нет других готовых потоков с тем же приоритетом, поток может продолжить выполнение.👍24❤1🔥1
Разница между загрузкой и инициализацией классов в Java на любопытном примере
Смотреть статью
Смотреть статью
Хабр
Разница между загрузкой и инициализацией классов в Java на любопытном примере
Привет, сегодняшняя статья будет о некоторых тонкостях загрузки и инициализации классов и немного о производительности (совсем чуть-чуть и в самом конце). Поводом для написания статьи стал вопрос на...
👍2
Какого сборщика мусора не существует для Jvm?
Anonymous Quiz
7%
Serial GC
7%
Parallel GC
26%
CMS
31%
G2
29%
Узнать ответ
👍12😱5
Что будет напечатано в результате выполнения этого кода?
Anonymous Quiz
46%
Ошибка компиляции
22%
11
9%
10
15%
1
9%
0
👍18
Prototype
В Java паттерн Prototype используется для создания новых объектов путем клонирования существующих объектов, вместо создания новых объектов с помощью конструкторов.
Для реализации этого паттерна необходимо, чтобы классы имели возможность клонирования, что достигается реализацией интерфейса
В этом примере класс
В
В Java паттерн Prototype используется для создания новых объектов путем клонирования существующих объектов, вместо создания новых объектов с помощью конструкторов.
Prototype позволяет создавать копии объектов с минимальными затратами и избегать сложной логики инициализации объектов.Для реализации этого паттерна необходимо, чтобы классы имели возможность клонирования, что достигается реализацией интерфейса
Cloneable и переопределением метода clone().В этом примере класс
Sheep имеет два приватных поля name и color, а также соответствующие геттеры и сеттеры. Класс также имплементирует интерфейс Cloneable и переопределяет метод clone() для создания копии объекта.В
main мы создаем оригинальный объект, клонируем его с помощью метода clone() и получаем клонированный объект clonedSheep. Затем мы изменяем его параметры и выводим результат.👍12❤1
Что такое класс Object? Какие в нем есть методы?
Object это базовый класс для всех остальных объектов в Java. Любой класс наследуется от Object и, соответственно, наследуют его методы:public boolean equals(Object obj) – служит для сравнения объектов по значению;int hashCode() – возвращает hash код для объекта;String toString() – возвращает строковое представление объекта;Class getClass() – возвращает класс объекта во время выполнения;protected Object clone() – создает и возвращает копию объекта;void notify() – возобновляет поток, ожидающий монитор;void notifyAll() – возобновляет все потоки, ожидающие монитор;void wait() – остановка вызвавшего метод потока до момента пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;void wait(long timeout) – остановка вызвавшего метод потока на определённое время или пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;void wait(long timeout, int nanos) – остановка вызвавшего метод потока на определённое время или пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;protected void finalize() – может вызываться сборщиком мусора в момент удаления объекта при сборке мусора.👍15❤2
Что выведет следующий код?
Anonymous Quiz
25%
012012012
14%
000111222
4%
010120212
57%
Все варианты правильные
👍18😢4❤1