Как стать автором
Обновить

Проблема использования CompletableFuture в нескольких потоках и её решение

Программирование *Java *
imageВ Java 8 появился новый класс CompletableFuture, который позволяет удобно писать асинхронный код.
При использовании CompletableFuture из нескольких потоков я столкнулся с его неочевидным поведением, а именно с тем, что callbacks на нём могут выполнятся совсем не в тех потоках, как ожидалось. Об этом и о том, как мне удалось решить проблему — я и расскажу в этой статье.

Мною разрабатывался асинхронный, неблокирующийся однопоточный клиент к серверу, который использовал потоконебезопасные структуры данных. Тесты проходили без проблем, но benchmarks иногда падали c ConcurrentModificationException на внутренних структурах однопоточного клиента.
Читать дальше →
Всего голосов 29: ↑26 и ↓3 +23
Просмотры 17K
Комментарии 54

Готовимся к Java 9. Обзор самых интересных улучшений

Блог компании JUG Ru Group Java *
Перевод


В эту среду, 30 августа, в офисе компании Oracle состоялась встреча JUG.ru с Олегом Шелаевым, Developer Advocate в компании ZeroTurnaround, которая делает JRebel и XRebel. Тема встречи — инструменты создания многопоточных программ на Java (от конструирования велосипедов и запуска потоков ручками, до ForkJoinPool-ов, зеленых потоков и транзакционной памяти).


Конечно, мы поинтересовались, какие фишки Java 9 считают в ZeroTurnaround наиболее полезными. В результате, разжились статьей, которую вы сейчас читаете. Оригинал статьи Олег опубликовал в блоге RebelLabs, там есть еще много интересного.

Читать дальше →
Всего голосов 47: ↑45 и ↓2 +43
Просмотры 55K
Комментарии 92

Асинхронное программирование на примерах: реконструкция методов java.util.concurrent.CompletableFuture

Java *
Tutorial

Для чего нужна реконструкция, если исходный код этого класса открыт?


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


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

Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 16K
Комментарии 0

Улучшаем allOf и anyOf в CompletableFuture

Блог компании OTUS Программирование *Java *
Перевод


И снова здравствуйте. В преддверии старта курса «Разработчик Java» подготовили для вас перевод полезного материала.


В CompletableFuture есть два метода, дизайн которых меня удивляет:

  • CompletableFuture#allOf
  • CompletableFuture#anyOf


В этой статье мы посмотрим, что с ними не так и как их можно сделать более удобными.
Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 6.3K
Комментарии 3