Перейти к основному содержимому

· 4 мин. чтения

1. Обзор

В этом руководстве мы обсудим различные методы join() в классе Thread . Мы подробно рассмотрим эти методы и некоторый пример кода.

Подобно методам wait() и notify() , join() является еще одним механизмом синхронизации между потоками.

Вы можете быстро просмотреть этот учебник , чтобы узнать больше о wait() и notify() .

2. Метод Thread.join ()

· 6 мин. чтения

1. Обзор

Генерация случайных значений — очень распространенная задача. Вот почему Java предоставляет класс java.util.Random .

Однако этот класс плохо работает в многопоточной среде.

Проще говоря, причина низкой производительности Random в многопоточной среде связана с конкуренцией, учитывая, что несколько потоков совместно используют один и тот же экземпляр Random .

Чтобы обойти это ограничение, Java представила класс java.util.concurrent.ThreadLocalRandom в JDK 7 — для генерации случайных чисел в многопоточной среде .

Давайте посмотрим, как работает ThreadLocalRandom и как его использовать в реальных приложениях.

· 3 мин. чтения

1. Обзор

В этом руководстве мы рассмотрим различные варианты передачи параметров в поток Java .

2. Основы работы с нитью

Напомню , что мы можем создать поток в Java, [реализуя `Runnable`](/lessons/b/-java-runnable-vs-extending-thread) или Callable .

Чтобы запустить поток, мы можем вызвать Thread#start (путем передачи экземпляра Runnable ) или использовать пул потоков , отправив его в ExecutorService .

· 3 мин. чтения

1. Введение

В этой краткой статье мы рассмотрим остановку потока в Java, что не так просто, поскольку метод Thread.stop() устарел.

Как объясняется в этом обновлении от Oracle, stop() может привести к повреждению отслеживаемых объектов.

2. Использование флага

Начнем с класса, который создает и запускает поток. Эта задача не завершится сама по себе, поэтому нам нужен способ остановить этот поток.

· 6 мин. чтения

1. Введение

Часто в наших приложениях нам нужно иметь возможность делать несколько вещей одновременно. Мы можем добиться этого несколькими способами, но ключевым из них является реализация многозадачности в той или иной форме.

Многозадачность означает выполнение нескольких задач одновременно , при этом каждая задача выполняет свою работу. Обычно все эти задачи выполняются одновременно, читая и записывая одну и ту же память и взаимодействуя с одними и теми же ресурсами, но выполняя разные действия.

2. Нативные темы

Стандартный способ реализации многозадачности в Java — использование потоков . Многопоточность обычно поддерживается операционной системой. Мы называем потоки, работающие на этом уровне, «нативными потоками».

· 4 мин. чтения

1. Обзор

Spring ThreadPoolTaskExecutor — это JavaBean, который обеспечивает абстракцию вокруг экземпляра java.util.concurrent.ThreadPoolExecutor и предоставляет его как Spring org.springframework.core.task.TaskExecutor . Кроме того, он легко настраивается с помощью свойств corePoolSize, maxPoolSize, queueCapacity, allowCoreThreadTimeOut и keepAliveSeconds. В этом руководстве мы рассмотрим свойства corePoolSize и maxPoolSize .

2. corePoolSize против maxPoolSize

Пользователи, плохо знакомые с этой абстракцией, могут легко запутаться в разнице в двух свойствах конфигурации. Поэтому давайте рассмотрим каждый по отдельности.

2.1. corePoolSize

· 9 мин. чтения

1. Обзор

Пакет java.util.concurrent предоставляет инструменты для создания параллельных приложений.

В этой статье мы сделаем обзор всего пакета.

2. Основные компоненты

java.util.concurrent содержит слишком много функций, чтобы обсуждать их в одной статье . В этой статье мы в основном сосредоточимся на некоторых из наиболее полезных утилит из этого пакета, таких как:

· 5 мин. чтения

1. Введение

В этом руководстве мы покажем разницу между традиционными потоками в Java и виртуальными потоками, представленными в Project Loom .

Далее мы поделимся несколькими вариантами использования виртуальных потоков и API-интерфейсов, представленных в проекте.

Прежде чем мы начнем, мы должны отметить, что этот проект находится в активной разработке. Мы запустим наши примеры на виртуальной машине loom с ранним доступом: openjdk-15-loom+4-55_windows-x64_bin.

Более новые версии сборок могут свободно изменять и нарушать текущие API. При этом в API уже произошли серьезные изменения, поскольку ранее использовавшийся класс java.lang.Fiber был удален и заменен новым классом java.lang.VirtualThread .

2. Общий обзор потоков и виртуальных потоков

· 3 мин. чтения

1. Обзор

В этой короткой статье мы рассмотрим стандартные методы sleep() и wait() в базовой версии Java и поймем различия и сходства между ними.

2. Общие различия между ожиданием и сном

Проще говоря, wait() — это метод экземпляра, который используется для синхронизации потоков.

Его можно вызвать для любого объекта, так как он определен прямо в java.lang.Object, но его можно вызвать только из синхронизированного блока . Он освобождает блокировку объекта, чтобы другой поток мог подключиться и получить блокировку.

· 3 мин. чтения

1. Введение

В этом руководстве мы рассмотрим настройку пула потоков для серверов веб-приложений Java, таких как Apache Tomcat, Glassfish Server и Oracle Weblogic.

2. Пулы серверных потоков

Пулы потоков сервера используются и управляются сервером веб-приложений для развернутого приложения. Эти пулы потоков существуют вне веб-контейнера или сервлета, поэтому они не подчиняются одной и той же границе контекста.

В отличие от потоков приложений серверные потоки существуют даже после остановки развернутого приложения.