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

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

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

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

1. Введение

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

2. Основы многопоточности

Прежде чем обсуждать прерывания, давайте рассмотрим многопоточность. Многопоточность — это процесс одновременного выполнения двух или более потоков. Приложение Java начинается с одного потока, называемого основным потоком, связанного с методом main() . Затем этот основной поток может запускать другие потоки.

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

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

1. Обзор

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

2. Thread Safe HashSet с использованием фабричного метода ConcurrentHashMap

Во-первых, мы рассмотрим класс ConcurrentHashMap , который предоставляет статический метод newKeySet() . По сути, этот метод возвращает экземпляр, который соответствует интерфейсу java.util.Set и позволяет использовать стандартные методы, такие как add(), contains() и т. д.

Это может быть создано просто как:

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

1. Обзор

С растущим спросом на написание неблокирующего кода нам нужны способы асинхронного выполнения кода.

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

2. Асинхронное программирование на Java

2.1. Нить

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

1. Введение

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

2. Проблема

HashMap не является потокобезопасной структурой данных из-за своей несинхронизированной природы. Это означает, что команды из многопоточной среды могут привести к несогласованности данных.

Чтобы решить эту проблему, мы можем либо преобразовать исходную карту с помощью метода Collections#synchronizedMap , либо использовать структуру данных HashTable . Оба вернут потокобезопасную реализацию интерфейса Map , но за счет производительности.

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

1. Обзор

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

2. Мьютекс

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

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

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

1. Обзор

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

2. Пул потоков

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

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

1. Обзор

Хотя ключевое слово volatile в Java обычно обеспечивает безопасность потоков, это не всегда так.

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

2. Что такое изменчивая переменная?

В отличие от других переменных, volatile переменные записываются и считываются из основной памяти. ЦП не кэширует значение изменчивой переменной.

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

1. Обзор

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

В этом руководстве мы увидим, как пулы потоков работают «под капотом», а затем сравним эти реализации и варианты их использования.

2. Кэшированный пул потоков

Давайте посмотрим, как Java создает пул кешированных потоков, когда мы вызываем Executors.newCachedThreadPool() :

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

1. Введение

В этом руководстве мы обсудим , как планировщик потоков Java выполняет потоки на основе приоритета . Кроме того, мы рассмотрим типы приоритетов потоков в Java.

2. Типы приоритета

В Java приоритет потока — это целое число в диапазоне от 1 до 10. Чем больше целое число, тем выше приоритет. Планировщик потоков использует это целое число из каждого потока, чтобы определить, какой из них должен быть разрешен к выполнению. Класс Thread определяет три типа приоритетов :

  • Минимальный приоритет
  • Нормальный приоритет
  • Максимальный приоритет

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

1. Введение

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

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

2. Замки

Давайте посмотрим на класс: