Главное правило многопоточности в Java: не делитесь состоянием между потоками.
не делитесь состоянием между потоками.
Большинство багов в concurrency появляются из-за одного —
несколько потоков одновременно изменяют одни и те же данные.
Как избежать проблем?
1. Используйте неизменяемые объекты (Immutable)
Если объект нельзя изменить —
его безопасно читать из любого количества потоков.
Пример:
- record в Java - идеальный immutable-тип
- поля final
- никакой синхронизации не нужно
2. Общайтесь через сообщения, а не через общее состояние
Вместо:
- менять общие переменные
Делайте так:
- один поток отправляет данные в очередь
- другой поток их получает
Например:
- BlockingQueue
- put() → отправка
- take() → получение
Плюсы подхода:
- Нет гонок данных (race conditions)
- Нет сложных synchronized
- Нет дедлоков
- Код проще и стабильнее
Золотое правило concurrency:
**Shared state — это проблема.
Message passing + immutability — это решение.**
Java библиотека