update And Fetch At
Требования к платформе и версии: Common (2.2)
expect inline fun AtomicIntArray.updateAndFetchAt(index: Int, transform: (Int) -> Int): Int
Атомарно обновляет элемент этого массива AtomicIntArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если значение типа integer по указанному индексу было параллельно обновлено во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.
На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиальным образом, и transform будет вызвана ровно один раз.
Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicIntArray(intArrayOf(1, 2, 3))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue * 10 }
println(updatedValue) // 20
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
expect inline fun AtomicLongArray.updateAndFetchAt(index: Int, transform: (Long) -> Long): Long
Атомарно обновляет элемент этого массива AtomicLongArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если значение типа long по указанному индексу было параллельно обновлено во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.
На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиальным образом, и transform будет вызвана ровно один раз.
Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicLongArray(longArrayOf(1L, 2L, 3L))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue * 10L }
println(updatedValue) // 20
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
expect inline fun <T> AtomicArray<T>.updateAndFetchAt(index: Int, transform: (T) -> T): T
Атомарно обновляет элемент этого массива AtomicArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если ссылка по указанному индексу была параллельно обновлена во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.
На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиальным образом, и transform будет вызвана ровно один раз.
Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicArray(arrayOf("hello", "concurrent", "world"))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue.uppercase() }
println(updatedValue) // CONCURRENT
println(a.toString()) // [hello, CONCURRENT, world]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
Требования к платформе и версии: JS (2.2)
actual inline fun AtomicIntArray.updateAndFetchAt(index: Int, transform: (Int) -> Int): Int
Атомарно обновляет элемент этого массива AtomicIntArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicIntArray(intArrayOf(1, 2, 3))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue * 10 }
println(updatedValue) // 20
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun AtomicLongArray.updateAndFetchAt(index: Int, transform: (Long) -> Long): Long
Атомарно обновляет элемент этого массива AtomicLongArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicLongArray(longArrayOf(1L, 2L, 3L))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue * 10L }
println(updatedValue) // 20
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun <T> AtomicArray<T>.updateAndFetchAt(index: Int, transform: (T) -> T): T
Атомарно обновляет элемент этого массива AtomicArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicArray(arrayOf("hello", "concurrent", "world"))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue.uppercase() }
println(updatedValue) // CONCURRENT
println(a.toString()) // [hello, CONCURRENT, world]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
Требования к платформе и версии: JVM (2.2), Native (2.2)
actual inline fun AtomicIntArray.updateAndFetchAt(index: Int, transform: (Int) -> Int): Int
Атомарно обновляет элемент этого массива AtomicIntArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если значение типа integer по указанному индексу было параллельно обновлено во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.
Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicIntArray(intArrayOf(1, 2, 3))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue * 10 }
println(updatedValue) // 20
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun AtomicLongArray.updateAndFetchAt(index: Int, transform: (Long) -> Long): Long
Атомарно обновляет элемент этого массива AtomicLongArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если значение типа long по указанному индексу было параллельно обновлено во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.
Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicLongArray(longArrayOf(1L, 2L, 3L))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue * 10L }
println(updatedValue) // 20
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun <T> AtomicArray<T>.updateAndFetchAt(index: Int, transform: (T) -> T): T
Атомарно обновляет элемент этого массива AtomicArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если ссылка по указанному индексу была параллельно обновлена во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.
Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicArray(arrayOf("hello", "concurrent", "world"))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue.uppercase() }
println(updatedValue) // CONCURRENT
println(a.toString()) // [hello, CONCURRENT, world]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
Требования к платформе и версии: Wasm-JS (2.2), Wasm-WASI (2.2)
actual inline fun AtomicIntArray.updateAndFetchAt(index: Int, transform: (Int) -> Int): Int
Атомарно обновляет элемент этого массива AtomicIntArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicIntArray(intArrayOf(1, 2, 3))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue * 10 }
println(updatedValue) // 20
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun AtomicLongArray.updateAndFetchAt(index: Int, transform: (Long) -> Long): Long
Атомарно обновляет элемент этого массива AtomicLongArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicLongArray(longArrayOf(1L, 2L, 3L))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue * 10L }
println(updatedValue) // 20
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun <T> AtomicArray<T>.updateAndFetchAt(index: Int, transform: (T) -> T): T
Атомарно обновляет элемент этого массива AtomicArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.
Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.
Исключения
если index выходит за границы этого массива.
Примеры
import kotlin.concurrent.atomics.*
import kotlin.concurrent.atomics.AtomicArray
import kotlin.test.assertFailsWith
fun main() {
//sampleStart
val a = AtomicArray(arrayOf("hello", "concurrent", "world"))
val updatedValue = a.updateAndFetchAt(1) { currentValue -> currentValue.uppercase() }
println(updatedValue) // CONCURRENT
println(a.toString()) // [hello, CONCURRENT, world]
// The index is out of array bounds
// a.updateAndFetchAt(10) { it } // will fail with IndexOutOfBoundsException
//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-and-fetch-at.html