Ответ
В Java для параллельного выполнения задач используется многопоточность. Основные подходы:
-
Класс
Thread— базовый механизм.new Thread(() -> { System.out.println("Задача в отдельном потоке"); }).start(); -
ExecutorService(рекомендуется) — пул потоков для эффективного управления ресурсами.ExecutorService executor = Executors.newFixedThreadPool(4); executor.submit(() -> { // Код задачи }); executor.shutdown(); -
CompletableFuture(Java 8+) — для асинхронного программирования и комбинирования задач.CompletableFuture.runAsync(() -> { // Асинхронная задача });
Ключевые моменты:
- Синхронизация: Потоки, работающие с общими данными, требуют синхронизации (например, через
synchronized,Lockили атомарные классы). - Обработка исключений: Исключения в потоке, не перехваченные внутри
run(), приводят к завершению потока. ИспользуйтеUncaughtExceptionHandler. - Производительность:
- Для CPU-bound задач оптимальное число потоков ≈ количеству ядер CPU.
- Для IO-bound задач (сеть, диск) можно создавать больше потоков.