Как потоки хранят данные:
- Локальные переменные стека: У каждого потока есть собственный стек, где хранятся его локальные переменные, параметры методов и контексты вызовов. Эти данные уникальны для каждого потока и не делятся между потоками.
- ThreadLocal: Специальный механизм в Java, который позволяет каждому потоку иметь собственное значение переменной. Это полезно, когда нужно обеспечить потокобезопасный доступ к данным.
Как потоки обращаются к данным:
- Локальные переменные: Безопасны, так как доступны только потоку, который их создал.
- ThreadLocal переменные: Предоставляют каждому потоку отдельный экземпляр переменной.
- Общие ресурсы: Для работы с общими данными потоки используют синхронизацию (
synchronized
,Lock
) или атомарные операции (например,AtomicInteger
) для предотвращения гонок потоков.