Назад к вопросам
Senior
5
Задача по коду: synchronized get/set и многопоточность (скриншот с кодом)
Компании, где спрашивали
Позитив Технолоджис
Ответ от нейросети
sobes.tech AI
В Java для обеспечения потокобезопасного доступа к данным часто используют ключевое слово synchronized. Оно позволяет синхронизировать методы или блоки кода, чтобы только один поток мог выполнять их одновременно.
Пример synchronized get/set для поля с многопоточностью:
public class Counter {
private int count = 0;
public synchronized int getCount() {
return count;
}
public synchronized void setCount(int count) {
this.count = count;
}
public synchronized void increment() {
count++;
}
}
Здесь методы getCount, setCount и increment синхронизированы, что гарантирует атомарность операций и предотвращает состояние гонки.
Если нужно более тонкое управление, можно использовать блоки synchronized:
public class Counter {
private int count = 0;
private final Object lock = new Object();
public int getCount() {
synchronized(lock) {
return count;
}
}
public void setCount(int count) {
synchronized(lock) {
this.count = count;
}
}
}
Это позволяет синхронизировать только необходимые участки кода, улучшая производительность.
Для более сложных сценариев стоит рассмотреть использование java.util.concurrent пакета, например, AtomicInteger или ReentrantLock.