Пакет kotlin.native.concurrent
Типы
AtomicInt
Атомные значения и замораживание: атомные типы AtomicInt, AtomicLong, AtomicNativePtr и AtomicReference являются уникальными с точки зрения замораживания. Они предоставляют операции изменения, но могут участвовать в замороженных подграфах. Таким образом, общие замороженные объекты могут иметь поля атомных типов.
class AtomicInt
AtomicLong
class AtomicLong
AtomicNativePtr
class AtomicNativePtr
AtomicReference
Атомная ссылка на замороженный Kotlin-объект. Может использоваться в конкурентных сценариях, но часто должна быть типа nullable и обнуляться, когда больше не нужна. В противном случае может произойти утечка памяти, если атомная ссылка является частью цикла ссылок.
class AtomicReference<T>
Continuation0
class Continuation0 : () -> Unit
Continuation1
class Continuation1<T1> : (T1) -> Unit
Continuation2
class Continuation2<T1, T2> : (T1, T2) -> Unit
DetachedObjectGraph
Отключенный граф объектов инкапсулирует передаваемый отключенный подграф, к которому нельзя получить внешний доступ, пока он не будет подключен с помощью функции расширения attach.
class DetachedObjectGraph<T>
FreezableAtomicReference
Атомная ссылка на Kotlin-объект. Может использоваться в конкурентных сценариях, но должна быть сначала заморожена, иначе ведет себя как обычная коробка для значения. Если заморожена, должна быть обнулена, когда больше не нужна. В противном случае может произойти утечка памяти, если атомная ссылка является частью цикла ссылок.
class FreezableAtomicReference<T>
FreezingException
Исключение, выбрасываемое при невозможности замораживания.
class FreezingException : RuntimeException
Future
Класс, представляющий абстрактное вычисление, результат которого может стать доступным в будущем.
class Future<T>
FutureState
Состояние объекта Future.
enum class FutureState
InvalidMutabilityException
Исключение, выбрасываемое при попытке изменить замороженные объекты.
class InvalidMutabilityException : RuntimeException
MutableData
Изменяемый буфер данных с одновременным доступом. Может быть доступен из нескольких потоков одновременно.
class MutableData
TransferMode
Основы передачи объектов.
enum class TransferMode
Worker
Класс, представляющий поток.
class Worker
WorkerBoundReference
Замороженная общая ссылка на Kotlin-объект.
class WorkerBoundReference<out T : Any>
Аннотации
SharedImmutable
Помечает свойство верхнего уровня с поддерживающим полем как неизменяемое. Возможно совместное использование значения такого свойства между несколькими потоками, но оно становится глубоко замороженным, поэтому изменения в его состоянии или состоянии ссылающихся на него объектов невозможны.
annotation class SharedImmutable
ThreadLocal
Помечает свойство верхнего уровня с поддерживающим полем или объект как локальный для потока. Объект остается изменяемым и его состояние можно изменять, но каждый поток будет иметь отдельную копию этого объекта, поэтому изменения в одном потоке не отражаются в другом.
annotation class ThreadLocal
Свойства
isFrozen
Проверяет, является ли данный объект null, замороженным или постоянным (т. е. инициализированным на этапе компиляции).
val Any?.isFrozen: Boolean
Функции
atomicLazy
Атомарный ленивый инициализатор, может использоваться в замороженных объектах, замораживает лямбду инициализации, поэтому используйте его очень осторожно. Кроме того, как и при других использовании AtomicReference, может потенциально утечь память, поэтому рекомендуется использовать atomicLazy в случаях объектов, живущих вечно, таких как объекты-синглтоны, или в случаях, когда гарантируется отсутствие циклического мусора.
fun <T> atomicLazy(initializer: () -> T): Lazy<T>
attach
Присоединяет ранее отсоединённую подграф объектов, созданную с помощью DetachedObjectGraph. Обратите внимание, что после присоединения графа объектов указатель DetachedObjectGraph.stable больше не имеет смысла и должен быть удалён, поэтому присоединение одного объекта DetachedObjectGraph может произойти только один раз.
fun <T> DetachedObjectGraph<T>.attach(): T
callContinuation0
fun COpaquePointer.callContinuation0()
callContinuation1
fun <T1> COpaquePointer.callContinuation1()
callContinuation2
fun <T1, T2> COpaquePointer.callContinuation2()
ensureNeverFrozen
Эта функция гарантирует, что если при попытке заморозки мы видим такой объект — замораживание завершается неудачей, и выбрасывается FreezingException.
fun Any.ensureNeverFrozen()
freeze
Замораживает подграф объектов, доступный из этого объекта. Замороженные объекты можно свободно использовать в разных потоках/воркерах.
fun <T> T.freeze(): T
waitForMultipleFutures
fun <T> Collection<Future<T>>.waitForMultipleFutures( millis: Int ): Set<Future<T>>
withWorker
Выполняет block с новым Worker в качестве ресурса, запуская нового воркера, вызывая предоставленный block (в текущем контексте) с только что запущенным воркером в качестве этого и завершая воркера после завершения блока. Обратите внимание, что эта операция довольно ресурсоёмкая, используйте предварительно настроенного воркера или пул воркеров, если нужно выполнять её часто.
fun <R> withWorker( name: String? = null, errorReporting: Boolean = true, block: Worker.() -> R ): R
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.native.concurrent/index.html