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

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

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

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

1. Обзор

Этот краткий учебник будет введением в использование блока synchronized в Java.

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

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

2. Почему синхронизация?

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

1. Обзор

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

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

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

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

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

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

1. Обзор

В этом руководстве мы обсудим различия между Collections.synchronizedMap() и ConcurrentHashMap .

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

2. Различия

Collections.synchronizedMap() и ConcurrentHashMap обеспечивают потокобезопасные операции с коллекциями данных.

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

1. Введение

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

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

2. Параллельное программирование

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

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

1. Обзор

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

Во-первых, мы кратко представим концепцию публикации в Java и JVM. Затем мы увидим, как эта концепция влияет на то, как мы запускаем потоки.

2. Публикация и побег

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

· 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 — использование потоков . Многопоточность обычно поддерживается операционной системой. Мы называем потоки, работающие на этом уровне, «нативными потоками».