Atomic Int
Требования к платформе и версии: Common (2.1)
expect class AtomicInt(value: Int)
Значение Int, которое можно обновлять атомарно.
Особенности реализации для конкретных платформ:
При компиляции для бэкенда Native AtomicInt хранит volatile-переменную Int и атомарно обновляет её. Подробнее о гарантиях атомарности при чтении и записи см. в документации kotlin.concurrent.Volatile.
При компиляции для JVM экземпляры AtomicInt представлены типом java.util.concurrent.atomic.AtomicInteger. Подробнее о гарантиях для volatile-доступов и обновлений атомарных переменных см. в спецификации языка Java (17.4 Модель памяти).
Для JS и Wasm AtomicInt реализован тривиально и не является потокобезопасным, поскольку эти платформы не поддерживают многопоточность.
Требования к платформе и версии: JS (2.1)
actual class AtomicInt(value: Int)
Значение Int, которое можно обновлять атомарно.
Поскольку платформа JS не поддерживает многопоточность, реализация тривиальна и не включает атомарную синхронизацию.
Требования к платформе и версии: JVM (2.1)
actual class AtomicInt(value: Int)
Значение Int, которое можно обновлять атомарно.
Экземпляры AtomicInt представлены типом java.util.concurrent.atomic.AtomicInteger и обеспечивают такие же гарантии атомарности.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
// The atomic counter of processed items
val processedItems = AtomicInt(0)
val totalItems = 100
val items = List(totalItems) { "item$it" }
// Split the items into chunks for processing by multiple threads
val chunkSize = 20
val itemChunks = items.chunked(chunkSize)
val threads = itemChunks.map { chunk ->
thread {
for (item in chunk) {
println("Processing $item in thread ${Thread.currentThread()}")
// Increment the counter atomically
processedItems += 1
}
}
}
threads.forEach { it.join() }
// The total number of processed items
println(processedItems.load()) // totalItems.toString()
//sampleEnd
}
Требования к платформе и версии: Native (2.1)
actual class AtomicInt(var value: Int)
Значение Int, которое можно обновлять атомарно.
Операция чтения load имеет те же эффекты на память, что и чтение свойства Volatile; операция записи store имеет те же эффекты на память, что и запись свойства Volatile; операции чтения-модификации-записи, такие как exchange, compareAndSet, compareAndExchange, fetchAndAdd, addAndFetch, имеют те же эффекты на память, что и чтение и запись свойства Volatile.
Подробнее о гарантиях атомарности при чтении и записи см. в документации kotlin.concurrent.Volatile.
Требования к платформе и версии: Wasm-JS (2.1), Wasm-WASI (2.1)
actual class AtomicInt(value: Int)
Значение Int, которое можно обновлять атомарно.
Поскольку платформа Wasm не поддерживает многопоточность, реализация тривиальна и не включает атомарную синхронизацию.
Конструкторы
Функции
Начиная с Kotlin: 2.1
expect fun addAndFetch(delta: Int): Int
Атомарно прибавляет указанное значение к текущему значению этого AtomicInt и возвращает новое значение.
Требования к платформе и версии: Native (2.1)
funaddAndGet(delta: Int): Int
Атомарно прибавляет указанное значение к текущему значению и возвращает новое значение.
Требования к платформе и версии: JVM (2.1)
fun AtomicInt.asJavaAtomic(): AtomicInteger
Приводит указанный экземпляр AtomicInt к типу java.util.concurrent.atomic.AtomicInteger.
Требования к платформе и версии: Common (2.1), JVM (2.1), Native (2.1), Wasm-JS (2.1), Wasm-WASI (2.1)
expect fun compareAndExchange(expectedValue: Int, newValue: Int): Int
Атомарно записывает указанное новое значение в этот AtomicInt, если текущее значение равно ожидаемому значению, и в любом случае возвращает старое значение.
Требования к платформе и версии: JS (2.1)
actual fun compareAndExchange(expectedValue: Int, newValue: Int): Int
Атомарно записывает указанное новое значение в этот AtomicInt, если текущее значение равно ожидаемому значению, и в любом случае возвращает старое значение.
Требования к платформе и версии: Common (2.1), JVM (2.1), Native (2.1), Wasm-JS (2.1), Wasm-WASI (2.1)
expect fun compareAndSet(expectedValue: Int, newValue: Int): Boolean
Атомарно записывает указанное новое значение в этот AtomicInt, если текущее значение равно ожидаемому значению; возвращает true, если операция выполнена успешно, и false только в том случае, если текущее значение не равно ожидаемому.
Требования к платформе и версии: JS (2.1)
actual fun compareAndSet(expectedValue: Int, newValue: Int): Boolean
Атомарно записывает указанное новое значение в этот AtomicInt, если текущее значение равно ожидаемому значению; возвращает true, если операция выполнена успешно, и false только в том случае, если текущее значение не равно ожидаемому.
Требования к платформе и версии: Common (2.1)
fun AtomicInt.decrementAndFetch(): Int
Атомарно уменьшает текущее значение этого AtomicInt на единицу и возвращает новое значение.
Требования к платформе и версии: Native (2.1)
fundecrementAndGet(): Int
Атомарно уменьшает текущее значение на единицу и возвращает новое значение.
Требования к платформе и версии: Common (2.1), JVM (2.1), Wasm-JS (2.1), Wasm-WASI (2.1)
expect fun exchange(newValue: Int): Int
Атомарно записывает указанное новое значение в этот AtomicInt и возвращает старое значение.
Требования к платформе и версии: JS (2.1)
actual fun exchange(newValue: Int): Int
Атомарно записывает указанное новое значение в этот AtomicInt и возвращает старое значение.
Требования к платформе и версии: Native (2.1)
actual fun exchange(newValue: Int): Int
Атомарно записывает новое значение в этот AtomicInt и возвращает старое значение.
Начиная с Kotlin: 2.1
expect fun fetchAndAdd(delta: Int): Int
Атомарно прибавляет указанное значение к текущему значению этого AtomicInt и возвращает старое значение.
Требования к платформе и версии: Common (2.1)
fun AtomicInt.fetchAndDecrement(): Int
Атомарно уменьшает текущее значение этого AtomicInt на единицу и возвращает старое значение.
Требования к платформе и версии: Common (2.1)
fun AtomicInt.fetchAndIncrement(): Int
Атомарно увеличивает текущее значение этого AtomicInt на единицу и возвращает старое значение.
Начиная с Kotlin: 2.2
expect inline fun AtomicInt.fetchAndUpdate(transform: (Int) -> Int): Int
Требования к платформе и версии: Native (2.1)
fungetAndAdd(delta: Int): Int
Атомарно прибавляет указанное значение к текущему значению и возвращает старое значение.
Требования к платформе и версии: Native (2.1)
fungetAndDecrement(): Int
Атомарно уменьшает текущее значение на единицу и возвращает старое значение.
Требования к платформе и версии: Native (2.1)
fungetAndIncrement(): Int
Атомарно увеличивает текущее значение на единицу и возвращает старое значение.
Требования к платформе и версии: Native (2.1)
fungetAndSet(newValue: Int): Int
Атомарно устанавливает указанное новое значение и возвращает старое значение.
Требования к платформе и версии: Common (2.1)
fun AtomicInt.incrementAndFetch(): Int
Атомарно увеличивает текущее значение этого AtomicInt на единицу и возвращает новое значение.
Требования к платформе и версии: Native (2.1)
funincrementAndGet(): Int
Атомарно увеличивает текущее значение на единицу и возвращает новое значение.
Требования к платформе и версии: Common (2.1)
operator fun AtomicInt.minusAssign(delta: Int)
Атомарно вычитает указанное значение из текущего значения этого AtomicInt.
Требования к платформе и версии: Common (2.1)
operator fun AtomicInt.plusAssign(delta: Int)
Атомарно прибавляет указанное значение к текущему значению этого AtomicInt.
Начиная с Kotlin: 2.1
expect fun store(newValue: Int)
Атомарно записывает новое значение в этот AtomicInt.
Начиная с Kotlin: 2.2
expect inline fun AtomicInt.updateAndFetch(transform: (Int) -> Int): Int
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.concurrent.atomics/-atomic-int/