Spec-Zone.ru › Kotlin 2

updateAndFetchAt

kotlin-stdlib/kotlin.concurrent.atomics/updateAndFetchAt

Требования к платформе и версии: Common (2.2)

@ExperimentalAtomicApi
expect inline fun AtomicIntArray.updateAndFetchAt(index: Int, transform: (Int) -> Int): Int

Атомарно обновляет элемент этого массива AtomicIntArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если значение типа integer по указанному индексу было параллельно обновлено во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.

На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиальным образом, и transform будет вызвана ровно один раз.

Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.

Исключения

IndexOutOfBoundsException

если 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
}

@ExperimentalAtomicApi
expect inline fun AtomicLongArray.updateAndFetchAt(index: Int, transform: (Long) -> Long): Long

Атомарно обновляет элемент этого массива AtomicLongArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если значение типа long по указанному индексу было параллельно обновлено во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.

На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиальным образом, и transform будет вызвана ровно один раз.

Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.

Исключения

IndexOutOfBoundsException

если 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
}

@ExperimentalAtomicApi
expect inline fun <T> AtomicArray<T>.updateAndFetchAt(index: Int, transform: (T) -> T): T

Атомарно обновляет элемент этого массива AtomicArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если ссылка по указанному индексу была параллельно обновлена во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.

На платформах, не поддерживающих многопоточность (JS и Wasm), эта операция реализована тривиальным образом, и transform будет вызвана ровно один раз.

Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.

Исключения

IndexOutOfBoundsException

если 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)

@ExperimentalAtomicApi
actual inline fun AtomicIntArray.updateAndFetchAt(index: Int, transform: (Int) -> Int): Int

Атомарно обновляет элемент этого массива AtomicIntArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Исключения

IndexOutOfBoundsException

если 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
}

@ExperimentalAtomicApi
actual inline fun AtomicLongArray.updateAndFetchAt(index: Int, transform: (Long) -> Long): Long

Атомарно обновляет элемент этого массива AtomicLongArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Исключения

IndexOutOfBoundsException

если 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
}

@ExperimentalAtomicApi
actual inline fun <T> AtomicArray<T>.updateAndFetchAt(index: Int, transform: (T) -> T): T

Атомарно обновляет элемент этого массива AtomicArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

JS не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Исключения

IndexOutOfBoundsException

если 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)

@ExperimentalAtomicApi
actual inline fun AtomicIntArray.updateAndFetchAt(index: Int, transform: (Int) -> Int): Int

Атомарно обновляет элемент этого массива AtomicIntArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если значение типа integer по указанному индексу было параллельно обновлено во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.

Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.

Исключения

IndexOutOfBoundsException

если 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
}

@ExperimentalAtomicApi
actual inline fun AtomicLongArray.updateAndFetchAt(index: Int, transform: (Long) -> Long): Long

Атомарно обновляет элемент этого массива AtomicLongArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если значение типа long по указанному индексу было параллельно обновлено во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.

Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.

Исключения

IndexOutOfBoundsException

если 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
}

@ExperimentalAtomicApi
actual inline fun <T> AtomicArray<T>.updateAndFetchAt(index: Int, transform: (T) -> T): T

Атомарно обновляет элемент этого массива AtomicArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Функция transform может быть вызвана несколько раз для повторного вычисления результата. Это может произойти, например, если ссылка по указанному индексу была параллельно обновлена во время применения transform или из-за ложного сбоя compare-and-set. Последнее зависит от реализации, и на это не следует полагаться.

Рекомендуется, чтобы transform выполнялась быстро и не имела побочных эффектов.

Исключения

IndexOutOfBoundsException

если 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)

@ExperimentalAtomicApi
actual inline fun AtomicIntArray.updateAndFetchAt(index: Int, transform: (Int) -> Int): Int

Атомарно обновляет элемент этого массива AtomicIntArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Исключения

IndexOutOfBoundsException

если 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
}

@ExperimentalAtomicApi
actual inline fun AtomicLongArray.updateAndFetchAt(index: Int, transform: (Long) -> Long): Long

Атомарно обновляет элемент этого массива AtomicLongArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Исключения

IndexOutOfBoundsException

если 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
}

@ExperimentalAtomicApi
actual inline fun <T> AtomicArray<T>.updateAndFetchAt(index: Int, transform: (T) -> T): T

Атомарно обновляет элемент этого массива AtomicArray по указанному индексу с помощью функции transform и возвращает обновлённое значение элемента.

Wasm не поддерживает многопоточность, поэтому реализация тривиальна, а transform будет вызвана ровно один раз для вычисления результата.

Исключения

IndexOutOfBoundsException

если 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API