Race condition (гонка состояний) — это ситуация, которая возникает в многопоточных программах, когда несколько потоков одновременно пытаются изменить общий ресурс или переменную, приводя к непредсказуемому поведению программы. Это может произойти из-за неопределенности в том, какой поток будет выполняться в данный момент, и какие операции он совершит.
Также race condition может возникнуть, если несколько потоков пытаются изменить одну и ту же общую переменную без какой-либо синхронизации. Например, если два потока пытаются одновременно увеличить значение переменной, которое зависит от текущего значения, то результат может быть непредсказуемым.
public class RaceConditionExample {
private static int sharedCounter = 0;
public static void main(String[] args) {
Runnable incrementTask = ( ) -> {
for (int i = 0; i < 1000; i++) {
sharedCounter++; // Несинхронизированное изменение общей переменной
}
Thread thread1 = new Thread ( incrementTask);
Thread thread2 = new Thread( incrementTask);
thread1.start); thread.start);
try {
thread1. join(); thread2. join();
} catch (InterruptedException e) {
e.printStackTrace() ;
System.out .printin( Final value of sharedCounter: " + sharedCounter);
}
}
