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 са синхронизирани, за да се избегне едновременен достъп и състезателни условия.