fetch And Update At
Требования к платформе и версии: Common (2.2)
expect inline fun AtomicIntArray.fetchAndUpdateAt(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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue * 10 }
println(oldValue) // 2
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
expect inline fun AtomicLongArray.fetchAndUpdateAt(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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue * 10L }
println(oldValue) // 2
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
expect inline fun <T> AtomicArray<T>.fetchAndUpdateAt(index: Int, transform: (T) -> T): T
Атомарно обновляет элемент этого AtomicLongArray с заданным индексом с помощью функции 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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue.uppercase() }
println(oldValue) // concurrent
println(a.toString()) // [hello, CONCURRENT, world]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
Требования к платформе и версии: JS (2.2)
actual inline fun AtomicIntArray.fetchAndUpdateAt(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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue * 10 }
println(oldValue) // 2
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun AtomicLongArray.fetchAndUpdateAt(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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue * 10L }
println(oldValue) // 2
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun <T> AtomicArray<T>.fetchAndUpdateAt(index: Int, transform: (T) -> T): T
Атомарно обновляет элемент этого AtomicLongArray с заданным индексом с помощью функции 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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue.uppercase() }
println(oldValue) // concurrent
println(a.toString()) // [hello, CONCURRENT, world]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
Требования к платформе и версии: JVM (2.2), Native (2.2)
actual inline fun AtomicIntArray.fetchAndUpdateAt(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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue * 10 }
println(oldValue) // 2
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun AtomicLongArray.fetchAndUpdateAt(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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue * 10L }
println(oldValue) // 2
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun <T> AtomicArray<T>.fetchAndUpdateAt(index: Int, transform: (T) -> T): T
Атомарно обновляет элемент этого AtomicLongArray с заданным индексом с помощью функции 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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue.uppercase() }
println(oldValue) // concurrent
println(a.toString()) // [hello, CONCURRENT, world]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
Требования к платформе и версии: Wasm-JS (2.2), Wasm-WASI (2.2)
actual inline fun AtomicIntArray.fetchAndUpdateAt(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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue * 10 }
println(oldValue) // 2
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun AtomicLongArray.fetchAndUpdateAt(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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue * 10L }
println(oldValue) // 2
println(a.toString()) // [1, 20, 3]
// The index is out of array bounds
// a.fetchAndUpdateAt(10) { it } // will fail with IndexOutOfBoundsException
//sampleEnd
}
actual inline fun <T> AtomicArray<T>.fetchAndUpdateAt(index: Int, transform: (T) -> T): T
Атомарно обновляет элемент этого AtomicLongArray с заданным индексом с помощью функции 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 oldValue = a.fetchAndUpdateAt(1) { currentValue -> currentValue.uppercase() }
println(oldValue) // concurrent
println(a.toString()) // [hello, CONCURRENT, world]
// The index is out of array bounds
// a.fetchAndUpdateAt(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/fetch-and-update-at.html