Ответ
- Synchronized блоки - самый простой способ, но может снижать производительность:
synchronized(this) {
// критическая секция
}
- Использование потокобезопасных коллекций из
java.util.concurrent:
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
- Atomic переменные для атомарных операций:
AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();
-
Иммутабельные объекты - создание неизменяемых объектов, которые безопасны для многопоточного доступа.
-
Использование Handler/Looper в Android для работы с UI из фоновых потоков.
-
LiveData/Flow - потокобезопасные компоненты Android Architecture Components.
-
ThreadLocal - когда нужно хранить данные, специфичные для потока.
-
Использование Executors вместо прямого создания потоков.
Важно выбирать подход в зависимости от конкретной задачи, учитывая баланс между производительностью и безопасностью.