Ответ
Многопоточность позволяет выполнять несколько потоков исполнения внутри одного процесса, что ведёт к более эффективному использованию ресурсов процессора.
Ключевые преимущества:
- Повышение производительности на многоядерных системах за счёт параллельных вычислений.
- Улучшение отзывчивости приложений (например, GUI не блокируется при выполнении длительной операции).
- Эффективное использование времени простоя (пока один поток ожидает I/O, другие могут работать).
- Упрощение моделирования параллельных процессов (например, обработка множества сетевых соединений).
Пример создания потока в Java:
// Через Runnable
Thread thread = new Thread(() -> {
System.out.println("Выполняюсь в потоке: " + Thread.currentThread().getName());
});
thread.start();
// Через ExecutorService (рекомендуемый способ)
ExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(() -> {
// Задача для выполнения в пуле потоков
});
executor.shutdown();
Сопутствующие проблемы и решения:
- Состояние гонки (Race Condition) — решается синхронизацией (
synchronized,Lock), атомарными классами (AtomicInteger). - Взаимная блокировка (Deadlock) — требует аккуратного проектирования порядка захвата блокировок.
- Видимость изменений между потоками — обеспечивается ключевым словом
volatileили конструкциями из пакетаjava.util.concurrent.