Встретить однопоточную программу в наше время — редкость (если не смотреть на JavaScript). В этом докладе мы разберём возможности организации многопоточного кода в Java: от конструирования велосипедов и запуска потоков ручками до ForkJoinPool-ов, зеленых потоков и транзакционной памяти.
Писать корректный многопоточный код сложно, и выбор правильной модели может существенно облегчить последующие страдания программистов. Но какой подход лучше всего?
В этом докладе мы разберем простую задачку на параллельное выполнение кода и решим ее разными способами: потоками, сгруппированными потоками, актёрами, зелеными потоками, с помощью CompletableFuture и так далее. Каждый новый способ отличается по простоте написания и поддержки кода, легче масштабируется на более сложные задачи. В итоге мы выясним, что и когда лучше использовать.