Race condition — это ситуация, при которой результат выполнения программы зависит от порядка выполнения параллельных потоков. data race — более конкретный термин, обозначающий неопределенный порядок доступа (хотя бы один — на запись) к одной и той же ячейке памяти из двух или более потоков без надлежащей синхронизации. Data race является одним из видов race condition.
Пример race condition (не data race): два потока пытаются создать файл с одним и тем же именем. Кто создаст первым, тот "победит". Пример data race: два потока одновременно инкрементируют несинхронизированную переменную.
java
Чтобы избежать data race и некоторых видов race condition в Java, используются механизмы синхронизации, такие как synchronized, volatile, Lock, атомарные переменные (AtomicInteger, AtomicLong и т.д.).
java