Sobes.tech
Junior — Middle

Какви методи могат да се използват за предотвратяване на състезателни условия в многонишкова среда?

sobes.tech AI

Отговор от AI

За да се предотврати състояние на състезание (race condition) в многопоточна среда, се използват следните методи:

  • Синхронизация (synchronized) — блокиране на критичните секции на кода, така че само един поток да може да ги изпълнява едновременно.
  • Използване на класове от java.util.concurrent — например, ReentrantLock, AtomicInteger, ConcurrentHashMap.
  • Избягване на споделено състояние — проектиране на потокобезопасни структури от данни или използване на неизменяеми обекти.
  • Използване на volatile — за осигуряване на видимост на промените в променливите между потоковете.

Пример с synchronized:

public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

Тук методите increment и getCount са синхронизирани, за да се избегне едновременен достъп и състезателни условия.