Junior — Middle
L'utilisation de volatile pour une variable de type long garantit-elle une exécution sûre de l'incrémentation parallèle du compteur à partir de plusieurs threads?
sobes.tech IA
Réponse de l'IA
Использование volatile для переменной типа long гарантирует видимость изменений между потоками, но не обеспечивает атомарность операций, таких как увеличение счетчика.
Например, операция counter++ состоит из трёх шагов: чтение, увеличение, запись. Даже если переменная volatile, два потока могут одновременно прочитать одно и то же значение, увеличить и записать, что приведёт к потере обновления.
Для безопасного параллельного увеличения счетчика лучше использовать:
- Класс AtomicLong из java.util.concurrent.atomic, который обеспечивает атомарные операции.
- Синхронизацию (synchronized) вокруг операции увеличения.
Пример с AtomicLong:
AtomicLong counter = new AtomicLong(0);
counter.incrementAndGet();
Таким образом, volatile не обеспечивает безопасное параллельное увеличение счетчика.