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

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

1. Введение

В этой статье мы дадим руководство по классу CountDownLatch и продемонстрируем, как его можно использовать, на нескольких практических примерах.

По сути, используя CountDownLatch , мы можем заставить поток блокироваться до тех пор, пока другие потоки не завершат данную задачу.

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

Проще говоря, CountDownLatch имеет поле счетчика , которое вы можете уменьшать по мере необходимости. Затем мы можем использовать его, чтобы заблокировать вызывающий поток, пока он не обнулится.

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

1. Введение

CyclicBarriers — это конструкции синхронизации, которые были представлены в Java 5 как часть пакета java.util.concurrent .

В этой статье мы рассмотрим эту реализацию в сценарии параллелизма.

2. Параллелизм Java — синхронизаторы

Пакет java.util.concurrent содержит несколько классов, помогающих управлять набором взаимодействующих друг с другом потоков. Некоторые из них включают:

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

1. Введение

В этом руководстве мы сравним CyclicBarrier и CountDownLatch и попытаемся понять сходства и различия между ними.

2. Что это?

Когда дело доходит до параллелизма, может быть сложно понять, для чего каждый из них предназначен.

Прежде всего, и CountDownLatch, и CyclicBarrier используются для управления многопоточными приложениями .

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

1. Обзор

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

2. Разница между демоном и пользовательскими потоками

Java предлагает два типа потоков: пользовательские потоки и потоки демона.

Пользовательские потоки — это потоки с высоким приоритетом. JVM будет ждать, пока любой пользовательский поток завершит свою задачу, прежде чем завершить ее.

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

1. Обзор

Хотя многопоточность помогает повысить производительность приложения, она также сопряжена с некоторыми проблемами. В этом руководстве мы рассмотрим две такие проблемы, взаимоблокировку и активную блокировку , с помощью примеров Java.

2. Тупик

2.1. Что такое тупик?

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

1. Введение

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

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

2. Подход на основе потоков

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

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

1. Введение

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

Цель состоит в том, чтобы напечатать числа по порядку, в то время как один поток печатает только четные числа, а другой поток печатает только нечетные числа. Для решения проблемы мы будем использовать концепции синхронизации потоков и межпотокового взаимодействия.

2. Потоки в Java

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

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

1. Обзор

ExecutorService — это API JDK, упрощающий выполнение задач в асинхронном режиме. Вообще говоря, ExecutorService автоматически предоставляет пул потоков и API для назначения ему задач.

2. Создание экземпляра ExecutorService

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

1. Обзор

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

Кроме того, мы покажем, как корректно закрыть ExecutorService и дождаться завершения выполнения уже запущенных потоков.

2. После выключения Исполнителя

При использовании Executor мы можем закрыть его, вызвав методы shutdown() или shutdownNow() . Хотя он не будет ждать, пока все потоки перестанут выполняться.

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

1. Обзор

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

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

Часть статьи, связанная с Java, сильно зависит от расположения объектов в памяти. Поскольку эти детали макета не являются частью спецификации JVM и оставлены на усмотрение разработчика , мы сосредоточимся только на одной конкретной реализации JVM: HotSpot JVM. Мы также можем использовать термины JVM и HotSpot JVM взаимозаменяемо на протяжении всей статьи.

2. Кэш-линия и когерентность