All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlin.utils.threadLocal.kt Maven / Gradle / Ivy

There is a newer version: 2.1.0-RC
Show newest version
/*
 * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
 * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
 */

package org.jetbrains.kotlin.utils

import java.util.concurrent.ConcurrentHashMap
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty

fun  threadLocal(initializer: () -> T): ReadWriteProperty = ThreadLocalDelegate(initializer)

private class ThreadLocalDelegate(private val initializer: () -> T) : ReadWriteProperty {
    private val map = ConcurrentHashMap()

    override operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
        return map.getOrPut(Thread.currentThread()) {
            initializer()
        }
    }

    override operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        map[Thread.currentThread()] = value
    }

    override fun toString(): String =
        "ThreadLocalDelegate(${map.entries.joinToString { "#${it.key.id}=>${it.value}" }})"
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy