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

88 записей с тегом "Java Concurrency"

Посмотреть все теги

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

1. Введение

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

В структуре данных LIFO элементы вставляются и извлекаются в соответствии с принципом «последним пришел – первым вышел». Это означает, что последний вставленный элемент извлекается первым.

В информатике стек — это термин, используемый для обозначения такой структуры данных.

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

2. Понимание стеков

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

1. Обзор

В этом руководстве мы рассмотрим различные способы установки имени потока в Java. Сначала мы создадим пример запуска двух потоков. Один печатает только четные числа, а другой только нечетные числа. Затем мы дадим нашим потокам собственное имя и отобразим их.

2. Способы установить имя темы

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

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

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

1. Введение

Guava предоставляет нам ListenableFuture с расширенным API по сравнению с Java Future по умолчанию. Давайте посмотрим, как мы можем использовать это в наших интересах.

2. Future , ListenableFuture и Futures

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

2.1. Будущее

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

1. Обзор

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

Эти потоки могут иметь повышенную производительность за счет накладных расходов на многопоточность.

В этом кратком руководстве мы рассмотрим одно из самых больших ограничений Stream API и посмотрим, как заставить параллельный поток работать с пользовательским экземпляром ThreadPool , в качестве альтернативы — есть библиотека, которая обрабатывает это .

2. Параллельный поток

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

1. Введение

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

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

2. Потоки в JVM

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

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

1. Обзор

В этом руководстве мы подробно рассмотрим класс AtomicMarkableReference из пакета java.util.concurrent.atomic .

Далее мы рассмотрим методы API класса и увидим, как мы можем использовать класс AtomicMarkableReference на практике.

2. Цель

AtomicMarkableReference — это универсальный класс, который инкапсулирует как ссылку на объект , так и логический флаг. Эти два поля связаны друг с другом и могут обновляться атомарно , либо вместе, либо по отдельности .

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

1. Обзор

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

2. Что такое двоичный семафор?

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

Для этого он сохраняет только одно разрешение для доступа. Следовательно, бинарный семафор имеет только два состояния: одно доступное разрешение или нулевое доступное разрешение .

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

1. Обзор

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

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

2. Типы блокирующих очередей

Мы можем выделить два типа BlockingQueue :

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

1. Введение

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

2. Использование потокобезопасных объектов

2.1. Совместное использование объектов

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

1. Введение

Это руководство представляет собой руководство по функциональным возможностям и вариантам использования класса CompletableFuture , который был представлен как улучшение API параллелизма Java 8.

2. Асинхронные вычисления в Java

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