Назад к вопросам
Junior
137
questionbank
Является ли коллекция HashMap потокобезопасной?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Нет. HashMap не является потокобезопасной. При одновременном доступе из нескольких потоков могут возникать проблемы конкурентности, такие как потеря данных или бесконечные циклы (для более старых версий Java).
Для обеспечения потокобезопасности в аналогичных сценариях можно использовать Hashtable (устаревший класс) или ConcurrentHashMap (рекомендуемый подход в современных приложениях). ConcurrentHashMap обеспечивает лучшую производительность за счет более гранулированной блокировки.
Пример использования ConcurrentHashMap:
// Использование ConcurrentHashMap для потокобезопасной карты
import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;
public class ThreadSafeMapExample {
public static void main(String[] args) {
Map<String, Integer> threadSafeMap = new ConcurrentHashMap<>();
// Добавление элементов из разных потоков безопасно
Runnable task = () -> {
for (int i = 0; i < 100; i++) {
threadSafeMap.put("key" + i, i);
}
};
Thread thread1 = new Thread(task);
Thread thread2 = new Thread(task);
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Размер карты: " + threadSafeMap.size());
}
}