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

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

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

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

1. Обзор

В этом руководстве мы узнаем, как bean-компоненты Spring, созданные с помощью области singleton , работают за кулисами для обслуживания нескольких одновременных запросов. Кроме того, мы поймем, как Java хранит экземпляры bean-компонентов в памяти и как обрабатывает одновременный доступ к ним.

2. Spring Beans и память кучи Java

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

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

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

1. Обзор

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

2. Использование цикла

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

Фактически, мы хотели бы обрабатывать только до определенного времени, а после этого мы хотим остановить выполнение и показать все, что список обработал до этого времени.

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

1. Обзор

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

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

2. Основы параллелизма

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

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

1. Обзор

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

2. Проект Ткацкий станок

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

Хотя для Loom еще нет запланированного выпуска, мы можем получить доступ к последним прототипам на вики Project Loom .

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

1. Обзор

В этом руководстве мы рассмотрим конструкцию ThreadLocal из пакета java.lang . Это дает нам возможность хранить данные отдельно для текущего потока и просто оборачивать их в объект специального типа.

2. API ThreadLocal

Конструкция TheadLocal позволяет нам хранить данные, которые будут доступны только определенному потоку .

Допустим, мы хотим иметь значение Integer , которое будет связано с конкретным потоком:

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

1. Обзор

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

Хотя многопоточность — мощная функция, она имеет свою цену. В многопоточных средах нам нужно писать реализации потокобезопасным способом. Это означает, что разные потоки могут обращаться к одним и тем же ресурсам без выявления ошибочного поведения или получения непредсказуемых результатов. Эта методология программирования известна как «безопасность потоков».

В этом уроке мы рассмотрим различные подходы к его достижению.

2. Реализации без сохранения состояния

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

1. Введение

LinkedBlockingQueue и ConcurrentLinkedQueue — две наиболее часто используемые параллельные очереди в Java . Хотя обе очереди часто используются в качестве параллельной структуры данных, между ними существуют тонкие характеристики и различия в поведении.

В этом кратком руководстве мы обсудим обе эти очереди и объясним их сходства и различия.

2. Связанная очередь блокировки

LinkedBlockingQueue — это необязательно ограниченная реализация очереди блокировки, что означает, что при необходимости можно указать размер очереди. ``

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

1. Обзор

В этом руководстве мы рассмотрим java.util.concurrent.Exchanger<T>. Это работает как общая точка для двух потоков в Java для обмена объектами между ними.

2. Введение в обменник

Класс Exchanger в Java можно использовать для совместного использования объектов между двумя потоками типа T. Класс предоставляет только один перегруженный метод exchange(T t) .

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

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

1. Обзор

В этом руководстве мы узнаем, как реализовать проблему «производитель-потребитель» в Java. Эта проблема также известна как проблема ограниченного буфера .

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

2. Проблема производитель-потребитель

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

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

1. Обзор

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

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

2. Зачем нам нужен AtomicStampedReference ?

Во- первых, AtomicStampedReference предоставляет нам как переменную ссылки на объект, так и штамп, который мы можем читать и записывать атомарно . Мы можем думать о метке как о метке времени или номере версии .