update
Требования к платформе и версии: Common (2.2)
expect inline fun AtomicInt.update(transform: (Int) -> Int)
Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного целого числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиально, а transform будет вызвана ровно один раз.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicInt(7)
a.update { currentValue ->
when (currentValue % 2) {
0 -> currentValue / 2
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
expect inline fun AtomicLong.update(transform: (Long) -> Long)
Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного длинного числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиально, а transform будет вызвана ровно один раз.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicLong(7L)
a.update { currentValue ->
when (currentValue % 2) {
0L -> currentValue / 2L
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
expect inline fun <T> AtomicReference<T>.update(transform: (T) -> T)
Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если эта атомарная ссылка была изменена параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиально, а transform будет вызвана ровно один раз.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
data class Wallet(val owner: String, val balance: Long)
val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100)
//sampleEnd
}
Требования к платформе и версии: JS (2.2)
actual inline fun AtomicInt.update(transform: (Int) -> Int)
Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.
JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicInt(7)
a.update { currentValue ->
when (currentValue % 2) {
0 -> currentValue / 2
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
actual inline fun AtomicLong.update(transform: (Long) -> Long)
Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.
JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicLong(7L)
a.update { currentValue ->
when (currentValue % 2) {
0L -> currentValue / 2L
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
actual inline fun <T> AtomicReference<T>.update(transform: (T) -> T)
Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.
JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
data class Wallet(val owner: String, val balance: Long)
val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100)
//sampleEnd
}
Требования к платформе и версии: JVM (2.2)
actual inline fun AtomicInt.update(transform: (Int) -> Int)
Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного целого числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicInt(7)
a.update { currentValue ->
when (currentValue % 2) {
0 -> currentValue / 2
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
actual inline fun AtomicLong.update(transform: (Long) -> Long)
Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного длинного числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicLong(7L)
a.update { currentValue ->
when (currentValue % 2) {
0L -> currentValue / 2L
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
actual inline fun <T> AtomicReference<T>.update(transform: (T) -> T)
Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если эта атомарная ссылка была изменена параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
data class Wallet(val owner: String, val balance: Long)
val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100)
//sampleEnd
}
Требования к платформе и версии: Native (2.2)
inline fun AtomicNativePtr.update(transform: (NativePtr) -> NativePtr)
Атомарно обновляет значение этого AtomicNativePtr значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если этот указатель был изменен параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
actual inline fun AtomicInt.update(transform: (Int) -> Int)
Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного целого числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicInt(7)
a.update { currentValue ->
when (currentValue % 2) {
0 -> currentValue / 2
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
actual inline fun AtomicLong.update(transform: (Long) -> Long)
Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если значение этого атомарного длинного числа было изменено параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicLong(7L)
a.update { currentValue ->
when (currentValue % 2) {
0L -> currentValue / 2L
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
actual inline fun <T> AtomicReference<T>.update(transform: (T) -> T)
Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.
Функция transform может вызываться несколько раз для повторного вычисления результата. Такое может произойти, например, если эта атомарная ссылка была изменена параллельно во время выполнения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и полагаться на это не следует.
Рекомендуется, чтобы функция transform выполнялась быстро и не имела побочных эффектов.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
data class Wallet(val owner: String, val balance: Long)
val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100)
//sampleEnd
}
Требования к платформе и версии: Wasm-JS (2.2), Wasm-WASI (2.2)
actual inline fun AtomicInt.update(transform: (Int) -> Int)
Атомарно обновляет значение этого AtomicInt значением, полученным при вызове функции transform для текущего значения.
Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicInt(7)
a.update { currentValue ->
when (currentValue % 2) {
0 -> currentValue / 2
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
actual inline fun AtomicLong.update(transform: (Long) -> Long)
Атомарно обновляет значение этого AtomicLong значением, полученным при вызове функции transform для текущего значения.
Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
val a = AtomicLong(7L)
a.update { currentValue ->
when (currentValue % 2) {
0L -> currentValue / 2L
else -> 3 * currentValue + 1
}
}
println(a.load()) // 22
//sampleEnd
}
actual inline fun <T> AtomicReference<T>.update(transform: (T) -> T)
Атомарно обновляет значение этого AtomicReference значением, полученным при вызове функции transform для текущего значения.
Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.thread
fun main() {
//sampleStart
data class Wallet(val owner: String, val balance: Long)
val a = AtomicReference(Wallet("Kodee", 100_00L))
a.update { wallet ->
wallet.copy(balance = wallet.balance + 1_00) // Kodee got a buck!
}
println(a.load()) // Wallet(owner=Kodee, balance=10100)
//sampleEnd
}
© 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/update.html