Как работает AtomicLong
AtomicLong
- это класс из пакета java.util.concurrent.atomic
, который обеспечивает атомарные операции чтения и записи для типа long
. Он позволяет безопасно выполнять инкрементацию, декрементацию, а также другие атомарные операции с числовыми значениями типа long
в многопоточной среде.
import java.util.concurrent.atomic.AtomicLong
fun main() {
// Создаем экземпляр AtomicLong и инициализируем его значением 0
val atomicLong = AtomicLong(0)
// Создаем массив потоков для инкрементации значения AtomicLong
val threads = Array(10) {
Thread {
for (i in 1..1000) {
// Инкрементируем значение AtomicLong
atomicLong.incrementAndGet()
}
}
}
// Запускаем все потоки
threads.forEach { it.start() }
// Ожидаем завершения всех потоков
threads.forEach { it.join() }
// Выводим итоговое значение AtomicLong
println("Final value: ${atomicLong.get()}")
}
В этом примере создается экземпляр AtomicLong
с начальным значением 0. Затем создается массив из 10 потоков, каждый из которых инкрементирует значение AtomicLong
1000 раз с помощью метода incrementAndGet()
. После завершения всех потоков выводится итоговое значение AtomicLong
.
AtomicLong
гарантирует, что операции инкрементации будут выполнены атомарно, даже при одновременном доступе из нескольких потоков. Это предотвращает гонки данных и обеспечивает безопасное обновление числовых значений в многопоточной среде.