Spec-Zone.ru › Kotlin 2

fetchAndUpdateAt

kotlin-stdlib/kotlin.concurrent.atomics/fetchAndUpdateAt

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

@ExperimentalAtomicApi
expect inline fun AtomicIntArray.fetchAndUpdateAt(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 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
}

@ExperimentalAtomicApi
expect inline fun AtomicLongArray.fetchAndUpdateAt(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 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
}

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

Атомарно обновляет элемент этого AtomicLongArray с заданным индексом с помощью функции 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 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)

@ExperimentalAtomicApi
actual inline fun AtomicIntArray.fetchAndUpdateAt(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 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
}

@ExperimentalAtomicApi
actual inline fun AtomicLongArray.fetchAndUpdateAt(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 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
}

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

Атомарно обновляет элемент этого AtomicLongArray с заданным индексом с помощью функции 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 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)

@ExperimentalAtomicApi
actual inline fun AtomicIntArray.fetchAndUpdateAt(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 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
}

@ExperimentalAtomicApi
actual inline fun AtomicLongArray.fetchAndUpdateAt(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 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
}

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

Атомарно обновляет элемент этого AtomicLongArray с заданным индексом с помощью функции 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 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)

@ExperimentalAtomicApi
actual inline fun AtomicIntArray.fetchAndUpdateAt(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 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
}

@ExperimentalAtomicApi
actual inline fun AtomicLongArray.fetchAndUpdateAt(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 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
}

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

Атомарно обновляет элемент этого AtomicLongArray с заданным индексом с помощью функции 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 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

Spec-Zone.ru

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